【发布时间】:2014-05-01 15:07:44
【问题描述】:
考虑到 UUID rfc 4122(16 字节)比 MongoDB ObjectId(12 字节)大得多,我试图找出它们的冲突概率比较。
我知道这不太可能,但在我的情况下,大多数 id 将在大量移动客户端中生成,而不是在有限的一组服务器中生成。 我想知道在这种情况下是否存在合理的担忧。
与所有 id 由少数客户端生成的正常情况相比:
- 自文档创建后检测冲突可能需要数月时间
- ID 由更大的客户群生成
- 每个客户端的 ID 生成率较低
【问题讨论】:
-
如果您担心数据完整性,为什么允许移动客户端创建 ObjectId 或任何永久 Id?
-
客户端可能离线,存储的信息可能长时间不同步。我不想强制 100% 在线移动应用程序
-
@WiredPrairie 大多数 client 库实现默认创建
_id值。并不是说直接连接是一个“好主意”。但是“ObjectId”生成是完全有效的。 -
就个人而言,我不会构建或设计允许客户执行此操作的系统。我会在离线时为他们分配临时 ID。我认为这与期望客户端在不通过数据验证层的情况下不直接写入 MongoDb 没有什么不同。
-
这一切让我重新考虑了 UUID 对离线客户端的作用。 @WiredPrairie 对等待验证层的时间 id 的评论似乎比仅仅依赖 UUID 更好地证明了未来,但实现起来也很痛苦……好吧,分区容错从来都不是小菜一碟。感谢您提到“生日问题”。