如何使用 RavenDb 默认 id 生成器获取连续 id
我正在为一个新项目评估 RavenDB。
如果我创建 100 个实体,我会得到很好的连续 id,例如:
- posts/1
- posts/2
- posts/3
- ...
- posts/100
但如果我构建一个新的 DocumentStore 实例(应用程序重新启动后)并尝试创建新实体,我会得到奇怪的 id像这样:
- posts/1025
- posts/1026
- posts/1027
有帮助吗?
注意:我正在使用带有 ASP.NET MVC 3 的嵌入式服务器
I'm evaluating RavenDB for a new project.
If i create 100 entities i got great consecutive ids like :
- posts/1
- posts/2
- posts/3
- ...
- posts/100
But if i build a new DocumentStore instance (after App Restart) and try to create new entities i got strange ids like this :
- posts/1025
- posts/1026
- posts/1027
Any help ?
Note : I'm using Embedded Server with ASP.NET MVC 3
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这是设计使然 - 每当您创建 DocumentStore 实例时都会生成新的 HiLo 键,因此您看到的间隙是其他会话中未使用的 id。
为什么你关心连续的 id?
关于该主题,这也可能是一本不错的读物:http://groups。 google.com/group/ravendb/browse_thread/thread/3dbcacbc8b366ff8/
This is by design - new HiLo keys are generated whenever you create a DocumentStore instance, so the gaps you are seeing are the unused ids from the other session.
Why do you care for consecutive ids?
This may be a good read on the subject, too: http://groups.google.com/group/ravendb/browse_thread/thread/3dbcacbc8b366ff8/
从 RavenDb 文档来看,您需要身份策略。
例如。
From the RavenDb documents, you're after the Identity strategy.
eg.
您可能想查看 RavenDB 的身份选项,但这并不是您真正应该关心的事情。
You might want to look at the identity option for RavenDB, but that isn't really something that you should care about.
您可以由客户端设置标识符,同时仍然依赖服务器为您生成标识符。这是使用 NextIdentityForCommand 命令完成的:
这样您甚至可以在与 Id 不同的字段中使用身份值。另一方面,这会使创建文档的速度变慢,因为您必须两次访问服务器。
You can set an identifier by your client, while still relying on the server to generate the identifier for you. It is done using the NextIdentityForCommand command:
This way you can use the identity value even in different field from Id. On the other hand, this makes creating a document slower, because you have to approach a server twice.