MongoDB 中'_id'如何判断其 unique? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jyb002
V2EX    MongoDB

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

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

    刚接触 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:0
    @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     Solana     5175 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 07:37 PVG 15:37 LAX 23:37 JFK 02:37
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86