刚接触 MongoDB ,看官方文档也没有介绍 id 作为 primary key 是怎么判断他在数据库里 unique 或是已经存在了。可能有介绍,没看到诶 Orz 。是 hash 吗?
所以想问下,当数据库规模大的时候,判重方式会不会影响到存入文档的效率?
如果影响,用什么算法来替代他默认的判重方式呢可以加快呢?
1
hjxx 2015-09-21 10:52:47 +08:00 1
ObjectId 和时间有关 不会重复
4 字节: UNIX 时间戳 3 字节:表示运行 MongoDB 的机器 2 字节:表示生成此_id 的进程 3 字节:由一个随机数开始的计数器生成的值 |
2
adrianzhang 2015-09-21 10:52:53 +08:00
在一个集合中是 unique.
用'_id'来读取,读取后 str ()转为字符串型 |
3
adrianzhang 2015-09-21 10:54:00 +08:00
哦哦。看一楼的
|
4
jyb002 OP |
5
khowarizmi 2015-09-21 12:07:57 +08:00
可以尝试 Bloom Filter ,不过要注意其缺点。
|
6
mengzhuo 2015-09-21 13:05:34 +08:00
@khowarizmi 有 cuckoo filter 啦~
|
7
minvacai 2015-09-21 13:17:41 +08:00
这个呢? unique index
http://docs.mongodb.org/master/tutorial/create-a-unique-index/ |
8
EPr2hh6LADQWqRVH 2015-09-21 13:23:00 +08:00
不会有区别,树结构而已。
hash 算法会有碰撞,只是触发概率极小 |
9
Had 2015-09-21 13:29:08 +08:00
第七楼说的对,建 unique 索引。
|
10
minvacai 2015-09-21 13:47:50 +08:00
unique 索引有一个问题,如果分片的话,就不能有 unique 索引,除非正好是 shard id
|
11
marvinwilliam 2015-09-21 19:13:58 +08:00
mongodb 可以重新建立索引,每次你添加新的数据之后,之前的索引就不准确了,需要调用 mongodb 的方法来重建索引,来加快查询速度,但是这个重建索引是非常耗时的(相比较关系数据库的查询时间相比),如果你要判重的话,可以在索引准确的情况下判断是否存在。
|
12
jyb002 OP |
13
marvinwilliam 2015-09-22 19:26:10 +08:00
@jyb002 恩,不过还是建议在添加很多数据之后重建索引,以提高搜索效率,如果你数据不多就没有这个必要了
|