MongoDB 中'_id'如何判断其 unique?

2015-09-21 10:43:05 +08:00
 jyb002

刚接触 MongoDB ,看官方文档也没有介绍 id 作为 primary key 是怎么判断他在数据库里 unique 或是已经存在了。可能有介绍,没看到诶 Orz 。是 hash 吗?
所以想问下,当数据库规模大的时候,判重方式会不会影响到存入文档的效率?
如果影响,用什么算法来替代他默认的判重方式呢可以加快呢?

5984 次点击
所在节点    MongoDB
13 条回复
hjxx
2015-09-21 10:52:47 +08:00
ObjectId 和时间有关 不会重复

4 字节: UNIX 时间戳
3 字节:表示运行 MongoDB 的机器
2 字节:表示生成此_id 的进程
3 字节:由一个随机数开始的计数器生成的值
adrianzhang
2015-09-21 10:52:53 +08:00
在一个集合中是 unique.
用'_id'来读取,读取后 str ()转为字符串型
adrianzhang
2015-09-21 10:54:00 +08:00
哦哦。看一楼的
jyb002
2015-09-21 11:45:56 +08:00
@hjxx
@adrianzhang
哦哦。是我没有说清楚。
如果我是自定义的'id'呢?
比方:每个 document 是一篇文章,我把每篇里面的‘ title'的值 md5 以后设置成’_id'
khowarizmi
2015-09-21 12:07:57 +08:00
可以尝试 Bloom Filter ,不过要注意其缺点。
mengzhuo
2015-09-21 13:05:34 +08:00
@khowarizmi 有 cuckoo filter 啦~
minvacai
2015-09-21 13:17:41 +08:00
EPr2hh6LADQWqRVH
2015-09-21 13:23:00 +08:00
不会有区别,树结构而已。
hash 算法会有碰撞,只是触发概率极小
Had
2015-09-21 13:29:08 +08:00
第七楼说的对,建 unique 索引。
minvacai
2015-09-21 13:47:50 +08:00
unique 索引有一个问题,如果分片的话,就不能有 unique 索引,除非正好是 shard id
marvinwilliam
2015-09-21 19:13:58 +08:00
mongodb 可以重新建立索引,每次你添加新的数据之后,之前的索引就不准确了,需要调用 mongodb 的方法来重建索引,来加快查询速度,但是这个重建索引是非常耗时的(相比较关系数据库的查询时间相比),如果你要判重的话,可以在索引准确的情况下判断是否存在。
jyb002
2015-09-22 06:26:19 +08:00
@avastms
@marvinwilliam
那结论就是说, MongoDB 本身就能保证‘_id'在 dataset 中的唯一性,并且效率较高,可以这么说吗?
marvinwilliam
2015-09-22 19:26:10 +08:00
@jyb002 恩,不过还是建议在添加很多数据之后重建索引,以提高搜索效率,如果你数据不多就没有这个必要了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/222359

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX