我收集了包含域信息的文檔domain
。其中一部分是歷史whois記錄,可能爲零或更多,並佔據了文檔的大部分空間。MongoDB:保存文檔是否重寫整個文檔?
如果我加載整個文檔,改變一些小的(如更新數字字段),並使用save()
方法將mongo刷新整個文檔到磁盤或只更新已更改的BSON?最終我的問題是,如果我爲了節省I/O而使用update()
複雜化了代碼,還是應該使用save()
?
這不完全是由於懶惰,文檔(在完整閱讀後)會經歷一系列步驟來修改/處理文檔,並且如果有任何更改,整個文檔都會被保存。但是,如果保存文檔的成本很高,那麼我可能需要以不同的方式考慮...
這很有幫助,但它並沒有真正回答我的問題。如果我有一個10MB BSON文檔,我讀它改變一個屬性並保存它會再次寫滿10mb?假設文件不必重新定位。 –
關於*「的詳細信息是整個事情寫的」*取決於MongoDB使用內存映射文件的事實。如果只更新一個屬性,理想情況下只有那些字節被刷新到磁盤。但是,如果BSON發生了足夠的變化,那麼您最終可能會將整個事件刷新到磁盤。 –
@蓋茨VP:我認爲整個頁面被標記爲髒,必須刷新。 –