bson-objectid和mongo自动生成的objectID

时间:2016-01-24 10:17:21

标签: node.js mongodb mongoose

我使用此https://www.npmjs.com/package/bson-objectid生成id以将数据插入mongodb。

我担心它会与mongo的自动生成的objectID冲突,这可能吗?我知道使用mongo的objectID甚至跨文档也很难实现冗余,但在这种情况下我不确定bson-objectid。

2 个答案:

答案 0 :(得分:0)

mongos objectid是由以下构造的uuid变体:

if (condition)
   a.erase(...);
else
   ++i;

如果bson-objectid可执行文件在另一台机器上运行(而不是mongod),那么它似乎不太可能共享“机器标识符”加上“进程ID”。机器标识符可能是类型1 uuid中使用的MAC地址。

如果两者在同一台机器上运行,那么bson-objectid使用相同的“机器标识符”似乎是合理的,但是“进程ID”或pid不太可能相同。除非它使用mongod的pid?!然后可能发生冲突。

当然可以把它留空,它会为你生成一个。

我不能准确地说出这个bson-objectid库的内容,因为它需要单步执行。但要记住,节点不是多线程的,而是多处理的,因此应该每个进程获得一个不同的2字节进程ID。

但通常如果它在每个生成的进程中使用唯一的进程ID,那么每个进程16M请求/秒后,您的代码将会中断。没问题。但是,如果它为每个衍生进程使用父进程ID,那么您将遇到麻烦。

所以我会看到多进程系统会发生什么。

答案 1 :(得分:0)

引自https://www.npmjs.com/package/bson-objectid

的文件
  

目标是与所有bson的公共API 100%兼容   实施(在这里找到:   https://github.com/mongodb/js-bson/blob/master/lib/bson/objectid.js)。

给定的规范实现与mongo的ObjectId几乎相同,所以

使用安全。