我们正在运行一个使用HiLo为实体生成ids的ASP.NET数据库应用程序。在此应用程序的顶部,我们有几个网站使用相同的数据库。我们看到的是,我们耗尽了ID,并且ID列变成了负数。
我们怀疑这与发电机有关。由于多个网站运行在相同的代码库和数据库之上,HiLo算法可能很快就会开始生成大整数范围之外的ids (当然,很快就是相对的)。
有没有可能这样配置生成器,使其也使用Id序列中的间隙(其中有相当多),而不是在它认为必要时直接增加值?
这会是一个解决方案吗?或者我们应该一起做一些其他的事情?
发布于 2011-02-01 22:30:28
如果可能,您可以切换到Guid.Comb generator,或者使用int64作为ids。看一看here,它最终决定使用哪种生成器。
发布于 2011-06-03 01:11:53
您的max_lo设置为什么?id的生成公式如下
H=高序列(从0开始) l_size =低块大小l=低序列(从1开始)
ID = h*l_size +l
也许你的max_lo设置为high?
发布于 2011-02-01 22:31:14
我也遇到过同样的问题,也找不到合适的答案。
我们还有一个网站,它是作为独立的网站运行的,每个网站都在自己的独立应用程序池中,所有这些都在同一个We服务器上。
实际上,如果您的数据库支持身份映射,那么您最好切换到身份映射。这应该不会太难,您应该能够使用一些TSQL来修改您的数据库模式,并使用一些搜索/替换来修改ID映射。
您的应用程序中是否有类似于UoW的概念?因为身份生成的一个缺点是它会破坏UoW (为了获得标识符而提前插入)。不过,这可能是一个值得付出的代价。
在我的例子中,系统可以很容易地作为单个站点/应用程序池存在(它是单个数据库上的多租户,具有单个共享连接字符串,并且被设计为作为test服务器上的单个实例运行),所以在我跳到数据库身份之前,我将对此进行测试。
https://stackoverflow.com/questions/4852820
复制相似问题