我一直在努力使用 NoRM ( http://normproject.org/ )附带的 HiLoIdGenerator ;我想用它来生成一个唯一标识符,我可以将它用作我的博客文章的 SLUG。目前,我使用 ObjectId 来唯一标识 MongoDB 中的文档,但由于这类似于 GUID,并且在 URL 中看起来不太好,我更喜欢使用类似 www.myblog.com/posts/1243 和所以这就是我决定使用 HiLoIdGenerator 的原因。
我想在客户端生成我的 HiLo id,我在 stuart harris 的博客http://red-badger.com/Blog/post/A-simple-IRepository3cT3e-implementation-for-MongoDB-and-NoRM上阅读.aspx,NoRM 的新 HiLo Id 生成器也允许这样做,方法是为客户端会话分配一个整数范围,可以不受惩罚地使用(其他客户端将使用不同的范围)但是当我打开 HiLoIdGenerator 时,它说 HiLoIdGenerator类使用 HILO 算法生成一个新的标识值。在您的项目中只应使用此类的一个实例。
我真的有三个问题:
1) 如果我的应用程序中有多个 HiLoIdGenerator 实例(假设我的服务类中有一个实例,它为每个新文档调用 GenerateId),我实际上可以保证我的所有 id 都是唯一的,因为代码HiLoIdGenerator 类说应用程序中应该只有这个类的一个实例?
2) HiLoIdGenerator 构造函数接受一个容量参数,我想知道它的作用,我传递了 0 并且所有生成的 Id 都是相同的,然后我传递了 1 个新的 HiLoIdGenerator(1) Id 从 1 开始并且是加 1;我不太了解它的作用,但我假设它与生成器可以生成的一系列潜在值有关,但我不确定,我想成为。有人可以解释这个论点吗?
3) 我想我理解 HiLo 算法的目的,如此处所述什么是 Hi/Lo 算法?但我不明白的是我是否可以有两个不同的应用程序的 MongoDB 实例,每个应用程序都查看 MongoDB 的不同实例但都包含相同的集合类型,生成的 id 是否是全局唯一的,即,我可以使用它们我想要一个 GUID 的方式,或者它们只是在给定的 MongoDB 实例中是唯一的,因此排除了以后将两个集合合并到一个 MongoDB 实例中?
谢谢