我正在開發一個使用mongodb的插件。該插件必須將一些.dcm文件(DICOM文件)作爲二進制文件存儲在數據庫中。之後,插件必須存儲文件的元數據,並且只能對這些元數據進行一些查詢。在MongoDB和GridFS中的性能
當然,我選擇了在GridFS的問題我來回答。因爲我可以使用相同的文件將二進制數據存儲在塊集合中,並將元數據存儲在文件集合中的元數據字段中(並繞過MongoDB的大小限制)。
但是另一個問題在我身上。這個解決方案會很好,但我同時存儲二進制數據和元數據。讓我解釋一下:首先我存儲二進制文件,然後檢索文件並從中讀取元數據並將元數據存儲在同一個文件中。出於某些外部原因,這對我來說是一種義務。所以我花了很多時間來檢索文件並重新恢復。對於更新從它已經存儲在文件的元數據,我使用此代碼:
GridFSDBFile file = saveFs.findOne(uri.getFileName());
if (file == null) {
return false;
} else {
file.setMetaData(new BasicDBObject());
file.save();
return true;
}
,我必須找到要修改它之前的文件,然後保存一遍的主要問題吧!
所以我的第一個問題是:有沒有從數據庫中,而不是findOne(字符串文件名)來檢索文件中的最佳方式?方法findOne(ObjectID id)是否更快? (我不這麼認爲,因爲我認爲fileName默認已經被索引,不是嗎?)
我試過另一種方式來做到這一點。爲了繞過這個問題,我決定存儲2個不同的文件,一個用於二進制數據,另一個用於元數據。在這種情況下,我沒有時間去檢索數據庫中的文件。但是我有兩倍多的文件......但我幾乎可以肯定它存在一個更好的方法來做到這一點!
所以我的第二個問題:你認爲我會用2件不同的藏品?一個使用GridF來存儲二進制數據,另一個使用經典的mongo存儲(或GridFS)來存儲metada?
謝謝你很多關於閱讀我和你的答案:)。