我一直在使用带有C#的MongoDB,并且一直在使用ObjectIds,然后是我的Entity ID的GUID。我讨厌看这些Id,我认为这是违反直觉的......我真的希望能够使用整数或长整数,比如关系数据库标识列。但我很难找到办法。如果我使用集合max + 1,那将导致竞争条件。我读过有关使用Hi-Lo Generator算法的文章,但是它是如何工作的呢?如果我有10个app服务器运行相同的代码怎么办?这是否意味着每个收藏品必须有10个hi lo标识范围?
如果有人能指点我使用C#算法来分享那会很棒!顺便说一句,我已经看过RNGCryptoServiceProvider,但不能保证它是唯一的,并且它不是顺序的int / long标识。我当时宁愿使用Hi-Lo ......
谢谢, 添
答案 0 :(得分:4)
您可以编写自己的id生成器并使用它。 Here你可以找到。但ObjectId
被设计为在所有分片/副本集中都是唯一的。因此,每个分片可以独立于其他分片生成唯一ID。使用分布式数据库中的int id,您将遇到许多问题。
答案 1 :(得分:1)
Guids可能不太好看,但它们经过测试和尝试。
你可以试着避免整数序列的冲突,但最后,我认为你会发现它不值得麻烦。对于随时间变化的分布式环境尤其如此。
答案 2 :(得分:-1)
这是要走的路:github.com/alexjamesbrown/MongDBIntIdGenerator