mongodb自增长(auto_increment)ID的实现方法

来源:未知 责任编辑:智问网络 发表时间:2013-10-22 19:28 点击:
1. 为什么要手动实现自增长ID
 
       mongodb的Collection在插入数据时,如果没有指定'_id'字段,系统会自动产生一个'_id', 产生的规则类似UUID。由于这个ID的长度比较长,如果在一个Collection中存储大量数据时,会带来比较大的空间浪费。所以就由了自定义'_id'的需求,比如定义'_id'的类型为int。那么如何实现这个自定义id类似mysql的auto_increment特性呢,mongodb没有提供这样的功能,需要我们手动去实现。
 
 
 
2. 实现原理
 
 
 
       假设要为CollectionB实现自增长ID, 需要引入另外一个专门计算'_id'的CollectionA. A中存放一条记录:{'_id':'CollectionB',  'currentIdValue':1}, 其中currentIdValue表示CollectionB的当前最大id值+1,每次往CollectionB里插入数据前,先到CollectionA查询currentIdValue 值并把这个值+1.
 
 
 
       从上面的原理可以看出,我们需要一个查询并加1的原子操作,恰好mongodb提供了这样的接口,而且是线程安全的,即是findAndModify。
 
      
 
3. 代码示例
 
       mongodb的脚本如下:
 
       db.runCommand(findAndModify:'CollectionA',query:{_id:'CollectionB'}, update:{
 
       $inc:{'currentIdValue':1}}, new:true};
 
       具体使用时,可以转换成对应语言的代码。
 
       参考API:
 
       http://www.mongodb.org/display/DOCS/findAndModify+Command
 
    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • Request.ServerVariables 参数大全
    • 执行全文索引时出现权限不足的解决方法
    • 导入excel文件处理流程节点的解决方案
    • 查看sql修改痕迹(SQL Change Tracking on Table)
    • MongoDB安装为Windows服务方法与注意事项
    • App数据层设计及云存储使用指南
    • PostgreSQL启动过程中的那些事三:加载GUC参数
    • 写给MongoDB开发者的50条建议Tip1
    • Percolator与分布式事务思考(二)
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1