2

场景:Hi/Lo 初始化为MyEntityLo 100

桌子是空的。

具有不同连接的两个会话都插入了三个项目。

表 ID

1
2
3
100
101
102

如果第三个稍后进来并插入三个项目:

表 ID

...
200
201
202

有没有办法不让这些差距?

4

2 回答 2

4

Lo 值是针对 SessionFactory 而不是 Session 存储的。只有在重新启动应用程序并创建 SessionFactory 的新实例时才会出现间隙。

从数据库中提取一个新的 Hi 值并将其存储在 SessionFactory 中,因此,如果您有一个网络农场,每个站点都将拥有自己的 SessionFactory 实例,每个实例都有自己的数据库中的“下一个”Hi 值。当 Lo 值用完时,它会将 Hi 更新为数据库中下一个可用的 Hi。

编辑:

如果您有客户端应用程序,那么我建议您根本不使用 HiLo,而是使用 GuidComb,它是一个顺序 Guid,您不会遇到间隙问题。

但是,由于它是一个现有的应用程序,并且您不能真正更改标识符,因此我建议要求客户端应用程序通过具有自己的 SF 的 Web 服务插入,这样您就可以维护单个 Hi 而不是每个客户端的多个 Hi应用程序。

如果你不能做到这一点,那么你将不得不降低你的 Lo。

于 2011-05-04T09:14:11.987 回答
2

正如Phill非常正确地指出的那样,当您构建时会出现差距,sessionFactory例如应用程序重新启动等,或者您在云上运行并且每个节点都有自己的一组Hiand lo

您可以将 lo 减少到10而不是100减少差距和/或我建议使用 int64而不是int32为了方便起见。

然而,这些差距真的很重要吗?你会看到自己用完了吗?

在使用Hilo. 我唯一看到的是有些人抱怨他们在使用int32时或lo设置为高时会耗尽。

于 2011-05-04T10:52:26.370 回答