【巨杉数据库Sequoiadb】指定OID为Date类型,高并发插入是否会导致OID重复

本文探讨了在高并发环境下,使用Java驱动生成的ObjectId(OID)作为日期类型时的唯一性问题。OID是一种12字节的数据类型,由时间戳、系统标识及序列号构成,确保了在同一进程中生成的OID值的唯一性。

【问题描述】
指定OID类型为Date,在高并发插入的场景下是否会导致oid值重复?如:

  1. 创建线程,每个线程里面插入类型为Date的OID:
    BSONObject obj = new BasicBSONObject();
    Date now = new Date();
    obj.put(“date”, now);
  2. 同时启动多个线程,多并发插入的情况下oid是否重复?

【解决办法】

  1. OID 为一个 12 字节的 BSON 数据类型,生成规则: 4 字节精确到秒的时间戳
    3 字节系统(物理机)标示
    2 字节进程 ID
    3 字节由随机数起始的序列号
  2. 由以上生成规则可知,OID 在集群环境中是全局唯一的
  3. Java BSON 的 OID 的生成规则略有区别,Java OID的 12字节内容由三部分组成:
    4 字节精确到秒的时间戳
    4 字节系统(物理机)标示
    4 字节由随机数起始的序列号
  4. 因此,使用java驱动生成的 OID 可保证组内 OID 值唯一,不能保证在集群环境中全局唯一
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值