1
A
回答
5
ObjectId是「_id」的默認類型,它使用12個字節的存儲空間,這使得它們具有24個十六進制數字的字符串表示形式:每個字節2個數字。這是在客戶端生成的。如果快速連續創建多個新的ObjectId,則可以看到每次只更改最後幾位數字。另外,ObjectId中間的幾個數字將會改變(如果你將創作空間隔開幾秒)。這是因爲創建ObjectIds的方式。
0|1|2|3 4|5|6 7|8| 9|10|11
Timestamp machine PID Increment
第一個四個字節的的ObjectId的是在幾秒鐘的時間戳:該12個字節的的ObjectId的生成如下。這提供了一些有用的屬性:時間戳與下五個字節組合時,以秒爲粒度提供唯一性。由於時間戳首先出現,這意味着ObjectIds將按大致插入順序進行排序(這不是一個強大的保證)。 在這四個字節中存在每個文檔創建時的隱式時間戳。
ObjectId的下三個字節是生成它的機器的唯一標識符。這通常是機器主機名的散列。通過包含這些字節,可以保證不同的機器不會產生碰撞的ObjectId。
爲了在單個機器上同時生成ObjectIds的不同進程間提供唯一性,接下來的兩個字節將從ObjectId生成進程的進程標識符(PID)中獲取。 ObjectId的前九個字節保證了它在單個機器和進程中的唯一性。最後三個字節只是一個增量計數器,它負責在一個進程中在一秒內完成唯一性。
這允許在一秒內爲每個進程生成最多256^3(16,777,216)的唯一ObjectId。
相關問題
- 1. _id與_id MongoDB中
- 2. ProtectedData使用哪種加密算法?
- 3. SortBy在Spark中使用哪種算法?
- 4. scipy.optimize.leastsq使用哪種優化算法?
- 5. 哪種激發MLIB算法使用?
- 6. 找出使用了哪種CRC16算法
- 7. ccache中使用哪種緩存算法?
- 8. MySQL使用哪種排序算法?
- 9. rnorm函數使用哪種算法
- 10. 使用哪種Multiple-Criteria排序算法?
- 11. NSURLCache使用哪種緩存算法?
- 12. 哪種算法更安全?
- 13. Mongodb - geospacial _id?
- 14. Java - MongoDB collection.find()_id
- 15. 使用哪種算法計算校驗和?
- 16. CPU /編程語言使用哪種指數運算算法?
- 17. PdfStamper類的setEncryption方法使用哪種加密算法/方法?
- 18. 建議使用哪種方法在Java中連接到MongoDB?
- 19. 如何使用mongodb _id查找記錄
- 20. 使用Scala從MongoDB獲取_id
- 21. 訪問Mongodb數據使用替代_id
- 22. 使用時間戳作爲mongodb _id?
- 23. 使用哪種Auth方法?
- 24. 使用哪種方法?
- 25. KVC使用哪種方法?
- 26. 使用哪種HTTP方法?
- 27. MongoDB _id超越9999999
- 28. 無法獲得mongodb _id值在php
- 29. 在這種情況下適用哪種圖遍歷算法
- 30. 可以在MongoDB(Mongoose)上下文外使用MongoDB _id嗎?
wouldnt一個uuid提供更多的獨特性?使用這種算法,似乎不可能生成重複的ID ...「機器」-id來自哪裏? – wutzebaer
我已經將它寫入了machineId是主機名散列的答案,請查看uuid vs objectId比較:http://stackoverflow.com/questions/22606364/collision-probability-of-objectid-vs-uuid-in一個大型分佈式系統a –