3

我们正在运行一个 ASP.NET 数据库应用程序,它使用 HiLo 为实体生成 id。在这个应用程序之上,我们有几个使用相同数据库的网站。我们看到的是我们用完了 id 并且 ID 列变成了负数。

我们怀疑这与生成器有关。由于多个网站运行在相同的代码库和数据库之上,HiLo 算法可能很快开始生成超出 bigint 范围的 id(当然很快是相对的)。

是否可以配置生成器,使其也使用 Id 序列中的间隙(其中有很多),而不是在认为有必要时直接增加值?

那会是一个解决方案吗?或者我们应该完全做其他事情吗?

4

3 回答 3

1

你的 max_lo 设置为多少?生成id的公式如下

h = 高序列(从 0 开始) l_size = 低块的大小 l = 低序列(从 1 开始)

ID = h*l_size + l

也许您的 max_lo 设置为高?

于 2011-06-02T17:11:52.687 回答
0

如果可能,您可以切换到Guid.Comb生成器,或者使用int64作为 id。看看这里就使用什么生成器做出最终决定。

于 2011-02-01T14:30:27.873 回答
0

我遇到了同样的问题,也找不到合适的答案。

我们还有一个站点作为单独的网站运行,每个站点都在自己的单独应用程序池中,都在同一个网络服务器上。

务实地,如果您的数据库支持,您最好切换到身份映射。这应该不难做到,您应该能够使用一些 TSQL 修改您的数据库架构,并使用一些搜索/替换来修改 ID 映射。

你的应用中有类似UoW的概念吗?因为身份生成的一个缺点是它会破坏 UoW(早期插入以获取标识符)。不过,这可能是值得付出的代价。

在我的情况下,系统可以很容易地作为单个站点/应用程序池存在(它是单个数据库上的多租户,具有单个共享连接字符串,并且旨在作为 Web 服务器上的单个实例运行)所以我要在我跳转到数据库身份之前进行测试..

于 2011-02-01T14:31:13.613 回答