c# -生成“标识”比如Id's与NoSQL (MongoDB)

本文关键字:NoSQL MongoDB -生成 标识 Id 比如 | 更新日期: 2023-09-27 18:04:01

我一直在使用MongoDB与c#,并一直使用ObjectIds,然后后来guid为我的实体id。我讨厌看这些Id,我认为这是反直觉的……我真的希望能够使用整数或长,就像关系数据库的Identity列一样。但我很难找到一个方法来做这件事。如果我使用集合max + 1,这将导致竞争条件。我读过关于使用Hi-Lo生成器算法的文章,但它是如何工作的呢?如果我有10个应用服务器运行相同的代码呢?这是否意味着每个集合必须有10个低标识范围?

如果有人能给我指出一个c#算法来分享,那将是伟大的!顺便说一下,我已经看到了RNGCryptoServiceProvider,但这并不能保证是唯一的,而且它不是一个顺序的int/long标识。在这一点上,我宁愿使用Hi-Lo……

谢谢,蒂姆。

c# -生成“标识”比如Id's与NoSQL (MongoDB)

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

Guids可能看起来并不漂亮,但它们是经过测试和尝试的。

你可以尝试避免整数序列上的冲突,但最终,我认为你会发现不值得这么麻烦。对于随时间变化的分布式环境尤其如此。


是这样的:github.com/alexjamesbrown/MongDBIntIdGenerator