2010-11-21 11 views
0

でファイルチャンクを追加するI持って、私は休止状態使用してPostgreSQLデータベースでこのファイルを保存することができますどのようにチャンクマッピングバイト[]休止状態にあるとチャンク

public void addFileChunk(Long fileId, byte[] buffer) 

100 Mbのビデオファイルを受信するWebサービス?

通常のJDBCの使用は非常に簡単です。私は自分のWebサービスメソッド内で、次のコードを使用します。

LargeObject largeObject = largeObjectManager.Open(fileId, LargeObjectManager.READWRITE); 
        int size = largeObject.Size(); 
        largeObject.Seek(size); 
        largeObject.Write(buffer); 
        largeObject.Close(); 

どのように私は休止状態を使用して同じ機能を達成することができますか?このファイルをチャンクで保存しますか?

バイトごとに別々の行に各ファイルのチャンクを格納することは私にとっては賢明ではないようです。ピースアドバイス。

+0

なぜあなたは単純にHibernateをバイパスしないのですか? –

+0

これはSpringの統合されたWebサービスなので、HibernateとTransaction管理Beanが既にインジェクトされており、他のメソッドで広く使用されています。このファイルを格納するためだけに新しいJDBC接続を開くことは望ましくありません。 –

答えて

1

データベースに100MBのファイルを保存することをお勧めします。私は代わりにそれらをファイルシステムに格納しますが、トランザクションがアクティブであると考えて、サーブレットを採用するのは合理的です。

  1. ファイル(受信されたもの)が一時的な場所に格納されるように、httpリクエストを処理します。
  2. オープントランザクション、一時的な場所を含むファイルメタデータ、クローズトランザクション
  3. 一時ファイルを監視する何らかの外部プロセスを使用して、このファイルをいくつかのサーブレットを介してユーザーが使用できる最終宛先に転送します。
+0

なぜPostgreSQLに大きなオブジェクトとして格納するのが助けにならないのか分かりません。 LOBインターフェースは、ファイルシステムのようなストリーミングインターフェースを提供するので、必要に応じて入力または出力をチャンクすることができます。それはうまく動作し、必要に応じて重要なデータのオフセットをインデックスするインデックスを作成することさえできます。 –

0

http://in.relation.to/Bloggers/PostgreSQLAndBLOBs

うんbyteasが悪いだろう参照してください。 Hibernateには大きなオブジェクトを使い続ける方法があり、ストリーミングインターフェースを維持することができます。