
刚接触 MongoDB ,看官方文档也没有介绍 id 作为 primary key 是怎么判断他在数据库里 unique 或是已经存在了。可能有介绍,没看到诶 Orz 。是 hash 吗?
所以想问下,当数据库规模大的时候,判重方式会不会影响到存入文档的效率?
如果影响,用什么算法来替代他默认的判重方式呢可以加快呢?
1 hjxx 2015-09-21 10:52:47 +08:00 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:0 @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 恩,不过还是建议在添加很多数据之后重建索引,以提高搜索效率,如果你数据不多就没有这个必要了 |