C# - 生成“身份”就像 NoSQL (MongoDB) 的 Id 一样?

发布于 2024-11-27 00:00:33 字数 400 浏览 0 评论 0原文

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

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

谢谢, 蒂姆

I've been using MongoDB with C#, and have been using ObjectIds, then later GUIDs for my Entity Ids. I hate looking at these Id's, I think it's counter intuitive... I'd really like to be able to use integers or longs, like relational DBs Identity column. But I'm having a hard time finding a way to do it. If I use collection max + 1, that will lead to race conditions. I've read about using a Hi-Lo Generator algorithm, but how does that work? What if I have 10 app servers running the same code? Does that mean I have to have 10 hi lo identity ranges per collection?

If someone can point me to a C# algorithm to share that would be great! I've seen RNGCryptoServiceProvider by the way, but that's not guaranteed to be unique, and it's not a sequential int/long Identity. I'd rather use Hi-Lo at that point...

Thanks,
Tim

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

雨巷深深 2024-12-04 00:00:33

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

You can write your own id generator and use it. Here you can find how. But ObjectId was designed to be unique across all shards/replica sets. So each shard can generate unique id independently from others. With int id in distributed database you will have many problems.

心不设防 2024-12-04 00:00:33

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

您可以不遗余力地尝试防止整数序列上的冲突,但最终,我认为您会发现这不值得麻烦。对于容易随时间变化的分布式环境尤其如此。

Guids may not be pretty to look at, but they are tested and tried.

You can go out of your way to try and prevent clashes on integer sequences but in the end, I think you'll find it's not worth the trouble. This is especially true for distributed environments that tend to change over time.

穿透光 2024-12-04 00:00:33

这是要走的路:github.com/alexjamesbrown/MongDBIntIdGenerator


This is way to go: github.com/alexjamesbrown/MongDBIntIdGenerator

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文