mongoDB修改"_id"的objectID到普通遞增id為什麼不好
滿天的星座
滿天的星座 2017-05-02 09:20:25
0
2
472

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

滿天的星座
滿天的星座

全部回覆(2)
左手右手慢动作

从原理上面分析一下其实很容易得到答案。假设你手里有一叠号码,1到100,下面:

  1. 来了一个人问你要一个号,你给他一张,这没问题。

  2. 两个人一起到了,都问你要一个号,你怎么办?慢点一个个来啊,发完一张再发一张,慢点但也将就

  3. 同时来了10个人问你要号怎么办,100个人呢?

把来了多少人想象成并发请求,不难发现很快分配号码这点成了瓶颈。所以自增ID其实对RDBMS也并不是什么好事呢。但好在传统数据库是单机的,无非就是自己给自己加个锁在内存中处理竞争,问题不大。MongoDB是个分布式数据库,几台机器要互相协调你拿1,我拿2,他拿3,这个锁要通过网络协调,就很低效了。
想想分布式的目的,其中之一就是提高并发,所以自增ID和高并发其实是背道而驰的,在分布式环境中要保证正确递增势必要影响效率。再说自增ID除了看起来清爽点实际上也没有什么太大的优势,所以必然就被放弃了。(记住ObjectID实际上也是可以排序的,就是插入时间顺序)

左手右手慢动作

https://docs.mongodb.com/v3.0/tutorial/create-an-auto-incrementing-field/#considerations

Generally in MongoDB, you would not use an auto-increment pattern for the _id field, or any field, because it does not scale for databases with large numbers of documents. Typically the default value ObjectId is more ideal for the _id.

文档上自己说,not scale for databases with large numbers of documents,自增的不适合有大数量documents的数据库

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!