打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
为MongoDB增加自增长主键生成的功能
标签: MongoDB 自增长主键
每个MongoDB的document都有一个_id字段作为它的第一个属性,这个值通常是一个BSON对象id,因此,这个id对于集合中的每个成员都是唯一的,如果用户插入一个document没有提供一个id,数据库将自动生成一个id,并存储在_id字段。
The BSON ObjectId Datatype
一个BSON ObjectID是由12个字节组成:4字节时间+3字节机器id+2字节进程id+3字节的数字
{ "_id" : ObjectId("4c691e72ed2a47b462dfa806") }
有时候我们的应用中需要自增长的数字型主键,MongoDB在这方面并没有给我们提供支持,我们需要加以改造,使其具有自增长主键生成的功能。此次的功能改造,依赖的是morphia开源项目(MongoDB在java语言上的ORM实现,http://code.google.com/p/morphia/),直接上代码吧。
首先定义一个保存各个 collection的主键增量值的系统配置collection:StoredSeqence
java 代码
/**
* MongoDB自增长主键维护队列,类似于MSSQL,Oracle维护主键的方式
*
* @author yongtree
* @date 2011-1-17 下午06:58:05
* @version 1.0
*/
@Entity(noClassnameStored=true)
public class StoredSeqence implements Serializable {
private static final long serialVersionUID = 1L;
@Id
String collName;
Long value;
public StoredSeqence(){
}
public StoredSeqence(String collName) {
this.collName = collName;
}
public Long getValue() {
return value;
}
public void setValue(Long value) {
this.value = value;
}
public String getCollName() {
return collName;
}
public void setCollName(String collName) {
this.collName = collName;
}
}
然后定义一个实体的基类,在基类中处理主键生成。
java 代码
/**
* 自增长数字类型主键的Mongo实体
*
* @author yongtree
* @date 2011-1-17 下午04:11:04
* @version 1.0
*/
public abstract class LongPKMongoEO extends BaseMongoEO {
@Id
Long _id;
@Transient
protected Datastore ds;
public void setDs(Datastore ds) {
this.ds = ds;
}
@PrePersist
void prePersist() {
//自增性主键的处理
if (_id == null) {
String collName = ds.getCollection(getClass()).getName();
Query<StoredSeqence> q = ds.find(StoredSeqence.class, "_id",
collName);
StoredSeqence ss = q.get();
if(ss==null){//不存在该实体的注册,则新创建一个
ss = new StoredSeqence(collName);
ss.setValue(1l);
}else{
ss.setValue(ss.getValue()+1);
}
ds.save(ss);
_id=ss.value;
}
}
public Long getId() {
return _id;
}
}
这样自增长主键的生成的主要功能基本上已经完成了,具体如何使用,接下来将根据实际的项目再做介绍,请继续关注我的博客。附件:
LongPKMongoEO.java
StoredSeqence.java
旧一篇:架构设计之–Don’t Repeat Yourself  |  新一篇:敏捷开发:拥抱变化的产品开发流程
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Spring整合Redis作为缓存
打造独特的ORM开发框架
​内存条ds和ss
MongoDB整合Spring
Spring Data MongoDB 二:添加、删除操作
基于C#的MongoDB数据库开发应用(2)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服