gpt4 book ai didi

java - 从两台服务器并发访问同一个表

转载 作者:行者123 更新时间:2023-12-02 08:22:41 27 4
gpt4 key购买 nike

我正在使用preparedStatements 从java J2EE 访问SQL Server 2005 表。这些 jar 部署在两台服务器上并并行运行。流程如下:

  1. 从事件表中选择新用户事件
  2. 处理它们(向用户和其他人发送电子邮件)
  3. 从事件表中删除已处理的事件(如果未执行步骤 2,则不应执行删除操作)

在某些情况下,用户会收到 2 封电子邮件(每个服务器一封),因为这 2 个选择是在删除语句之前同时执行的。我没有表的管理员权限,只能从 java 应用程序访问它。

如何在第一次选择时锁定表并在删除后解锁?您是否有其他解决方案?

最佳答案

如果您以事务方式接收工作,则只有一台服务器可以接收它:

set transaction isolation level repeatable read

update top 1 tbl
set ProcessingOnServer = HOST_NAME()
from YourWorkTable tbl
where ProcessingOnServer is null
and Done = 0

现在您可以选择详细信息,因为您知道工作项已安全分配给您:

select  *
from YourWorkTable tbl
where ProcessingOnServer = HOST_NAME()
and Done = 0

函数 host_name() 返回客户端名称,但如果您认为更安全,可以从客户端应用程序传入主机名。

我们通常会添加时间戳,以便您可以检查处理项目时间过长的服务器。

关于java - 从两台服务器并发访问同一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5183090/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com