C# - 使用 NoSQL (MongoDB) 生成类似 Id 的“身份”?

Tim*_*Tim 2 c# identity unique mongodb mongodb-.net-driver

我一直在 C# 中使用 MongoDB,并且一直使用 ObjectId,后来又使用 GUID 作为我的实体 Id。我讨厌查看这些 Id,我认为这是违反直觉的...我真的很希望能够使用整数或长整型,例如关系数据库的 Identity 列。但我很难找到一种方法来做到这一点。如果我使用集合 max + 1,这将导致竞争条件。我读过有关使用 Hi-Lo 生成器算法的内容,但它是如何工作的呢?如果我有 10 个应用程序服务器运行相同的代码怎么办?这是否意味着每个集合必须有 10 个 hi lo 身份范围?

如果有人可以向我指出一个 C# 算法来分享,那就太好了!顺便说一下,我见过 RNGCryptoServiceProvider,但不能保证它是唯一的,而且它不是一个连续的 int/long Identity。那时我宁愿使用 Hi-Lo...

谢谢,蒂姆

And*_*ich 5

您可以编写自己的 id 生成器并使用它。在这里您可以找到具体方法。但ObjectId 被设计为在所有分片/副本集中都是唯一的。因此每个分片都可以独立于其他分片生成唯一的 id。在分布式数据库中使用 int id 会遇到很多问题。