- MongoDB進階與實戰:微服務整合、性能優化、架構管理
- 唐卓章
- 426字
- 2021-05-19 17:44:42
3.3 ObjectId生成器
MongoDB集合中所有的文檔都有一個唯一的_id字段,作為集合的主鍵。在默認情況下,_id字段使用ObjectId類型。如下面的代碼:


這里的_id是自動生成的,其中"5d15767ff4531cb8062f3c93"是ObjectId的16進制編碼形式,該字段總共為12個字節。
為了避免文檔的_id字段出現重復,ObjectId被定義為3個部分:
● 4字節表示Unix時間戳(秒)。
● 5字節表示隨機數。
● 3字節表示計數器(初始化時隨機)。
由此可見,經過多個字段隨機組合后,出現重復的概率是極低的。
對于新插入集合中的文檔,如果沒有包含_id字段,則數據庫服務器會自動生成一個新的ObjectId。但實際上,大多數客戶端驅動都會自行生成這個字段,比如MongoDB Java Driver會根據插入的文檔是否包含_id字段來自動補充ObjectId對象。這樣做不但提高了離散性,還可以降低MongoDB服務器端的計算壓力。另外,在ObjectId的組成中,5字節的隨機數并沒有明確定義,客戶端可以采用機器號、進程號來實現,如圖3-2所示。

圖3-2 ObjectId結構
ObjectId具體如何生成,可以參考下面的代碼:



以上代碼來自MongoDB Java Driver(3.6.2版本)。當然,具體應用也可以使用自動生成的_id,但必須保證_id的唯一性。
推薦閱讀
- 多媒體CAI課件設計與制作導論(第二版)
- The Supervised Learning Workshop
- C++ Builder 6.0下OpenGL編程技術
- Mastering Ubuntu Server
- Mastering AndEngine Game Development
- Apache Mesos Essentials
- Learning FuelPHP for Effective PHP Development
- 蘋果的產品設計之道:創建優秀產品、服務和用戶體驗的七個原則
- Procedural Content Generation for C++ Game Development
- Mastering React
- Python 3 數據分析與機器學習實戰
- Machine Learning for OpenCV
- Java Web開發基礎與案例教程
- Spring Boot 3:入門與應用實戰
- C語言從入門到精通(視頻實戰版)