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

42次阅读

共计 388 个字符,预计需要花费 1 分钟才能阅读完成。

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

  1. 创建线程,每个线程里面插入类型为 Date 的 OID:

BSONObject obj = new BasicBSONObject();
Date now = new Date();
obj.put(“date”, now);

  1. 同时启动多个线程,多并发插入的情况下 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 值唯一,不能保证在集群环境中全局唯一
正文完
 0

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

42次阅读

共计 387 个字符,预计需要花费 1 分钟才能阅读完成。

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

  1. 创建线程,每个线程里面插入类型为 Date 的 OID:

BSONObject obj = new BasicBSONObject();
Date now = new Date();
obj.put(“date”, now);

  1. 同时启动多个线程,多并发插入的情况下 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 值唯一,不能保证在集群环境中全局唯
正文完
 0