1. 程式人生 > >mongoDB為什麼不用自增ID

mongoDB為什麼不用自增ID

以前學過sql,現在在學mongodb。看到objectID各種想把它改成和sql一樣從1開始auto increment的id,我就全給update了。聽說並不能這樣做,還是要保留mongo原有的自動生成的obectID, 但是為什麼?

從原理上面分析一下其實很容易得到答案。假設你手裡有一疊號碼,1到100,下面:

  1. 來了一個人問你要一個號,你給他一張,這沒問題。

  2. 兩個人一起到了,都問你要一個號,你怎麼辦?慢點一個個來啊,發完一張再發一張,慢點但也將就

  3. 同時來了10個人問你要號怎麼辦,100個人呢?

把來了多少人想象成併發請求,不難發現很快分配號碼這點成了瓶頸。所以自增ID其實對RDBMS也並不是什麼好事呢。但好在傳統資料庫是單機的,無非就是自己給自己加個鎖在記憶體中處理競爭,問題不大。MongoDB是個分散式資料庫,幾臺機器要互相協調你拿1,我拿2,他拿3,這個鎖要通過網路協調,就很低效了。
想想分散式的目的,其中之一就是提高併發,所以自增ID和高併發其實是背道而馳的,在分散式環境中要保證正確遞增勢必要影響效率。再說自增ID除了看起來清爽點實際上也沒有什麼太大的優勢,所以必然就被放棄了。(記住ObjectID實際上也是可以排序的,就是插入時間順序