2016-03-22 37 views
1

私はmongoDBに格納するファイルを持っています。私が望むのは、ファイル全体(いくつかのMBサイズでもよい)をロードするのではなく、ストリームを開いてmongoDBに転送して、書き込み操作を効率的に保つことです。私はbase64でエンコードされたバイト[]でコンテンツを格納する気にしない。JavaのmongoDBにストリームを書き込む

その後、私はファイルを読むときに同じことをします。つまり、ファイル全体をメモリに読み込まず、代わりにストリームで読み込みます。

私は現在、Vertexサーバでhibernate-ogmを使用していますが、原因を効率的に処理すると、別のapiに切り替えることができます。

実際には、いくつかのフィールドといくつかの添付ファイルを含むドキュメントを保存したいと考えています。

答えて

2

GridFSを使用できます。

File f = new File("sample.zip"); 
GridFS gfs = new GridFS(db, "zips"); 
GridFSInputFile gfsFile = gfs.createFile(f); 
gfsFile.setFilename(f.getName()); 
gfsFile.setId(id); 
gfsFile.save(); 

それとものInputStream inを持っている場合::特にあなたが大きなファイル(> 16メガバイト)を格納する必要がある場合は、この方法をお勧めし

GridFS gfs = new GridFS(db, "zips"); 
GridFSInputFile gfsFile = gfs.createFile(in); 
gfsFile.setFilename("sample.zip"); 
gfsFile.setId(id); 
gfsFile.save(); 

あなたのいずれかを使用してファイルを読み込むことができますGridFS.find方法:

GridFSDBFile gfsFile = gfs.findOne(id); 
InputStream in = gfsFile.getInputStream(); 
+0

お返事ありがとうございます。このアプローチは、16 MB未満のドキュメントにも使用できますか?私は、私のユースケースで8 MB以上のものは予期していません。 –

+1

もちろん、どんなサイズのファイルにも使用できます。 – Sebastian

+0

ありがとうございました。おそらく私の質問ではっきりしていなかったが、添付ファイルとともにドキュメントにいくつかのフィールドが追加されている。同じ文書の中に他のフィールドを置くことは可能でしょうか? –

関連する問題