V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐工具
RoboMongo
推荐书目
50 Tips and Tricks for MongoDB Developers
Related Blogs
Snail in a Turtleneck
jyb002
V2EX  ›  MongoDB

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

  •  
  •   jyb002 · 2015-09-21 10:43:05 +08:00 · 5940 次点击
    这是一个创建于 3344 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    13 条回复    2015-09-22 19:26:10 +08:00
    hjxx
        1
    hjxx  
       2015-09-21 10:52:47 +08:00   ❤️ 1
    ObjectId 和时间有关 不会重复

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