存儲在每個文檔的_id字段中的自動生成的BSON ID是否是GUID? 該文件說明其'最有可能獨特',所以我有點困惑。爲什麼他們會使用不能保證唯一的ID?是Mongodb ObjectIds GUID?
回答
它是獨一無二的在大多數的要求,它是由時間戳的,機器的唯一標識符(本機主機的散列),流程標識符和在最後的增量編號。 http://docs.mongodb.org/manual/reference/object-id/
ObjectId存在於文檔here解釋。由於MongoDB沒有強制唯一性來節省時間,因此不能保證是唯一的。它只是相信複雜的生成算法可能永遠不會在同一個數據存儲區中生成兩個相同的ObjectId。所以在技術上它不是一個GUID,但非常好。
其唯一性基於概率。不像@mattexx回答:
它不是「保證」是唯一的,因爲MongoDB不強制唯一性來節省時間。
MongoDB的DOES執行uniqness上ObjectId
,它實際上對_id
領域唯一索引。在談到節省時間時,ObjectId
以這種方式是歷史的,因爲它是在MongoDB沒有確認任何寫入的時候設計的,並且需要99%的機會在沒有客戶端等待確認的情況下插入新的唯一記錄ObjectIds是客戶端生成的)。
他們不是然而的GUID他們作爲@Asya說,都保證有uniqness高水平。
只要時間永遠向後移動仍然有99%的機會將是唯一的永恆。好吧,正如@Devesh所說,有1萬億(還沒有完成數學計算),即使是一個GUID被重複的機會,但我認爲你不會很快達到這個概率。
ID衝突的機會是理論上足夠接近零,它可以推定爲典型的Web應用程序。許多真實世界的系統(不管是否使用Mongo)都依賴於GUID的這個屬性,儘管這對於安全/任務關鍵型系統來說不是一個好的假設。
在實用實際上,如果存在錯誤配置或第三方庫錯誤,確實會出現錯誤。這些不應該排除這個概念,但重要的是要意識到這些風險,並在可能的情況下避免這些風險。
一些good analysis here的可能導致碰撞的實際問題。特別是:
一些Mongo驅動程序使用隨機數而不是遞增計數器字節數。在這些情況下,生成非唯一ID的機會爲1/16777216,但是隻有在同一秒內生成這兩個ID(即在ID的時間段更新到下一秒之前)的情況下,才能生成非唯一ID機器,在同一個過程中。
- 1. MongoDB&web2py:使用ObjectIds
- 2. Mongodb/Mongoose:填充ObjectIds數組
- 3. 存儲MongoDB ObjectIds數組的類型?
- 4. MongoDB C#插入GUID
- 5. GUID但不是真GUID
- 6. 比較和排序Node中的MongoDB ObjectIDs - 轉換爲字符串?
- 7. 如何在MongoDB中使用QueryBuilder構建ObjectIds查詢
- 8. 在mongodb和nodejs中找到兩個給定值之間的objectIds
- 9. MongoDB:如何使用聚合框架返回objectIDs?
- 10. Django從json對象查詢視圖中的MongoDB ObjectIds
- 11. Mongo ObjectIDs:在野外使用安全嗎?
- 12. 使用.NET Guid作爲mongodb文檔ID
- 13. 將MongoDB Rest的Guid轉換爲C#CLR
- 14. 將.NET Guid轉換爲MongoDB ObjectID
- 15. 在MongoDB中存儲Guid as String的缺點是什麼?
- 16. 作爲BsonString而不是BinData序列化Guid到MongoDB?
- 17. 如何驗證GUID是一個GUID
- 18. Mongoose select:false一個ObjectIds數組
- 19. 這是什麼GUID?
- 20. ID(來自mongo的ObjectIds)可安全地在URL中使用嗎?
- 21. System.DirectoryServices.AccountManagement.Principal是否有空GUID?
- 22. 什麼是GUID類型?
- 23. GUID是如何確定的?
- 24. 遠程驗證不是GUID
- 25. 總是等號的GUID
- 26. 是的GetType()。GUID Marshal.GenerateGuidForType不同?
- 27. GUID是最終的ID嗎?
- 28. 查找包含objectIds數組的文檔
- 29. Mongoose查詢使用多個ObjectIds(與'ref')
- 30. 如何使用java創建ObjectIds查詢?
它是保證是獨一無二的,至少我從來沒有見過一個真正的碰撞。有很多關於編碼究竟是什麼的文檔。 – 2013-04-23 05:19:12
即使GUID也不能保證它的獨特性,但它們的形式可能始終是唯一的。 – Devesh 2013-04-23 05:39:39