2014-01-30 82 views
3

首先請原諒我問一個愚蠢的問題,但我是mongodb和學習遊標的新手。我有一個問題,爲什麼我們需要光標隔離?手冊說:「對文檔進行間插寫操作可能會導致遊標在文檔發生更改時多次返回文檔。」我無法理解這一點。如果有人能夠提供更多的信息或舉一些例子,我會很高興。mongoDB光標隔離

回答

3

好的,基本上MongoDB直接從100個批次中讀取數據文件(可以用batch_size更改爲最大16MB,基本上返回的是單個BSON文件)。

這與寫出靜態結果集的SQL相反。所以,你馬上明白,遊標,如果他們有業務交錯,如果他們中的排序,即改變他們可以返回文檔,如果你有這個疑問:

db.c.find().sort({s:1}); 

s是一個整數,因此你修改的頭文件發現具有最高的s,以便它出現在後面,實際上(按最後一批)再次獲取該文檔。

這當然是一個巨大的問題。在某些情況下,您可能最終會繞圈轉圈,從未完成查詢。

通常情況下,這是不可能用在酸中I但你必須明白,MongoDB的不喜歡酸和不遵守它(http://docs.mongodb.org/manual/faq/concurrency/),並使用實際上以這種方式打破光標隔離特定的併發規則更新文檔的s的寫入操作確實發生在耗盡遊標之前,即使它發生在另一個線程中。

希望能夠爲您解決這個問題。