mongoDB修改"_id"的objectID到普通递增id为什么不好
滿天的星座
滿天的星座 2017-05-02 09:20:25
0
2
624

以前学过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

通常在 MongoDB 中,您不会对 _id 字段或任何字段使用自动增量模式,因为它无法针对具有大量文档的数据库进行扩展。通常默认值 ObjectId 对于 _id 来说更理想。

文档上自己说,不适合有大量文档的数据库,自增的不适合有大量文档的数据库

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板