mongoDB修改"_id"的objectID到普通递增id为什么不好

查看:97
本文介绍了mongoDB修改"_id"的objectID到普通递增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实际上也是可以排序的,就是插入时间顺序)

这篇关于mongoDB修改"_id"的objectID到普通递增id为什么不好的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆