我有一个Java EE Web应用程序和一个SQL Server数据库。 我打算稍后集群我的数据库。
现在,我有两张桌子: - 用户 - 地方
但我不想使用SQL Server的自动ID。 我想生成自己的id,因为集群。
所以,我已经创建了一个新表Parameter
。参数表有两列:TableName
和LastId
。我的参数表存储了最后一个id。当我添加新用户时,我的方法addUser执行此操作:
它在工作。但它是一个Web应用程序,那么1000个人同时如何呢?也许他们中的一些得到了相同的最后一个id。我怎么解决这个问题?我已尝试使用synchronized,但它无效。
你有什么建议?是的,我必须避免自动增量。
我知道用户必须等待。
答案 0 :(得分:0)
自动ID可能在群集中更好地工作,但如果您想要数据库可移植或自己实现分配器,基本方法是在乐观循环中工作。
我更喜欢'Next ID',因为它使逻辑更清晰,所以我将在这个例子中使用它。
当然,在选择/更新时也可以使用TableName条件来选择适当的分配器行。
你还应该看看在块中分配 - 增量= 200,比如说 - 并在appserver中缓存它们。这将提供更好的并发性和比每次点击DB要快很多。