我有一個內置在Node/Meteor中的文件存儲服務,它利用了GridFS,並且它被複制到多個容器中。什麼我目前正試圖發現,是,如果這段代碼實際上是意識到了讀/寫一致性MongoDB的filemd5是否有能力設置readPreference
db.command({
filemd5: someFileId,
root: 'fs'
}, function callback(err, results) {
...
})
我上傳的文件塊,併合並所有塊到該命令可以在一個文件後,被執行。我有一種感覺,它使用次要成員(我有幾個md5值是空文件 - d41d8cd98f00b204e9800998ecf8427e
)。是否有任何文檔或其他設置?
那些2個PARAMS在文檔中描述的唯一選擇.. https://docs.mongodb.com/manual/reference/command/filemd5/
UPDATE
對於合併塊確切的代碼是在這裏第三方包:
cursor = files.find(
{
'metadata._Resumable.resumableIdentifier': file.metadata._Resumable.resumableIdentifier
length:
$ne: 0
},
{
fields:
length: 1
metadata: 1
sort:
'metadata._Resumable.resumableChunkNumber': 1
}
)
https://github.com/vsivsi/meteor-file-collection/blob/master/src/resumable_server.coffee#L26
然後有111-119行首先執行filemd5,然後運行文件更新
@db.command md5Command, (err, results) ->
if err
lock.releaseLock()
return callback err
# Update the size and md5 to the file data
files.update { _id: fileId }, { $set: { length: file.metadata._Resumable.resumableTotalSize, md5: results.md5 }},
(err, res) =>
lock.releaseLock()
callback err
https://github.com/vsivsi/meteor-file-collection/blob/master/src/resumable_server.coffee#L111-L119
寫入最後一塊後,cursor = files.find()
與所有合併的東西推出,因此,如果閱讀偏好是secondaryPreferred
那麼他們可能不是依然存在?該代碼是否應該重構爲僅使用主要代碼?
你能你如何上傳和合並塊詳細點嗎?您可以查看mongo日誌或'files'和'chunk'集合以獲取完整的文檔詳細信息。現在,我會將文檔和內容放入答案中。 – MasterAM
@MasterAM我已經包含了原始的源代碼(這是咖啡的腳本,但應該給出一個關於在那裏運行的實際查詢) –
看了一下後,它似乎不像我預期的那樣。我無法深入挖掘時間,所以我不認爲我可以幫助你超越我答案中的參考。看起來,admin命令提供的md5不是從'files'文件中獲取的,但可能在文件保存時存儲在別處。 – MasterAM