MongoDB的自增主鍵 id的生成機制講解

2021-12-30 11:52:40 字數 877 閱讀 4674

如果插入文件時沒有 _id 鍵,系統會自動建立。mongodb中儲存的文件必須有這個「_id」鍵。這個鍵的值可以是任意型別,預設是個objectid物件,每個文件有唯一的 _id ,確保集合中的每個文件都會被唯一標示。

objectid是 _id 的預設型別,不同的機器都能用全域性唯一的同種方法方便的生成。因為mongodb初衷是用作分布式資料庫,在多個伺服器的分片環境中生成唯一識別符號非常重要。

objectid使用12位元組的儲存空間,是乙個由24個十六進製制陣列組成的字串。

- 0-3位,共4位,是從標準紀元開始的時間戳,單位為秒。

- 時間戳與4-8這5位,提供了秒級別的唯一性。

- 由於時間戳在前,意味著objectid大致會按照插入的順序排列。

- 隱含了文件建立時間,絕大多數驅動也都會提供乙個方法來從objectid中獲取這個時間

- 4-6位,共3位,是所在主機的唯一識別符號。通常是機器主機名的雜湊值。這樣能確保不同主機生成不同的objectid,不產生衝突。

- 7-8位,共2位,來自產生objectid的程序的程序識別符號,為了確保在同一臺機器上併發的多個程序產生的objectid是唯一的。

- 這樣前9個位元組就保證了同一秒鐘不同機器不同程序產生的objectid是唯一的。最後3個位元組是乙個自動增加的計數器,確保相同程序的同一秒產生的id也是不同的。一秒鐘最多執行每個程序擁有256^3(共16777216)個不同的objectid。

另外,_id 主鍵的生成,可以由mongodb伺服器來做,但通常是由客戶端由客戶端的驅動程式完成的。這個做法很好的體現了mongodb的哲學:能交給客戶端驅動程式來做的事情就不要交給伺服器來做。原因是,即便像mongodb這樣擴充套件性非常好的資料庫,擴充套件應用層也要比擴充套件資料庫層容易得多。將工作交給客戶端來處理,就減輕了資料庫擴充套件的負擔。

mybaits返回自增主鍵ID

mybaits兩種獲取自增主鍵id的方法 一種是使用usegeneratedkeys,第二種是selectkey方法獲取。insert into sys users id,username,password,salt,locked values selectkey select last inser...

mybatis註解獲取插入的自增主鍵id

insert address selectkey statement select last insert id keyproperty userauthenticationrequestv3.cerid before false resulttype int.class 下面介紹乙個重要註解 se...

實體類主鍵自增id的註解

jpa的註解來定義實體的時候,使用 id來註解主鍵屬性即可。如果資料庫主鍵是自增長的,需要在增加乙個註解 generatedvalue,即 1 generatedvalue strategy generationtype.identity 2 id 3 private string id ps ge...