【发布时间】:2015-12-08 05:03:40
【问题描述】:
问题
我有一个主寄存器和 x 个子寄存器,它们将数据流式传输到主寄存器。我在夜间将这些寄存器与主寄存器同步。所以白天会在x1,x2,...xn中创建数据,晚上所有数据都会发送到主寄存器。
这不太可能,但例如x1 和x2 可能生成相同的_id。现在,如果我同步它们,第一个寄存器将创建文档,第二个寄存器将 upsert(并因此覆盖)我的文档。
解决方案
当前
为了防止我目前将原始 _id 保存在字段 refId 下,这非常糟糕,因为我无法使用主寄存器上的所有引用和大部分函数。
选项 I - 自动增量
我计划切换到自动增量_ids,但我读到如果你打算扩展,这是你不应该做的事情:
https://blog.serverdensity.com/switching-to-mongodb-and-auto-increment/ https://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/
选项二——修改子寄存器_id
我已经保存了我的文档来自哪个子寄存器。因此我可以检查_id 是否存在但有另一个子寄存器。如果是这样,我可以为新文档生成一个新的_id,并将新的_id 还给我的子寄存器。乍一看这听起来很简单,但我的文档中确实有很多参考资料。
问题)
有什么好的解决方案来处理这个可能存在重复 ID 的问题?有没有更简单但有效的方法来解决这个问题?例如。自动为 24 位 ObjectId 添加前缀。
【问题讨论】:
-
您是否观察到任何重复的 ObjectId。根据这篇文章的答案,这种情况不太可能发生:stackoverflow.com/questions/4677237/…