V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐工具
RoboMongo
推荐书目
50 Tips and Tricks for MongoDB Developers
Related Blogs
Snail in a Turtleneck
jyb002
V2EX  ›  MongoDB

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

  •  
  •   jyb002 · Sep 21, 2015 · 6730 views
    This topic created in 3879 days ago, the information mentioned may be changed or developed.

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

    13 replies    2015-09-22 19:26:10 +08:00
    hjxx
        1
    hjxx  
       Sep 21, 2015   ❤️ 1
    ObjectId 和时间有关 不会重复

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