gpt4 book ai didi

java - Oracle Java - 如何锁定一行以使其他进程无法读取它?

转载 作者:行者123 更新时间:2023-12-02 03:21:38 25 4
gpt4 key购买 nike

我有一个用例,我从表中读取一组记录,对其执行一些操作,然后更新记录。我希望在此时间段内没有其他应用程序/组件能够读取记录。这是因为我想在多个主机上运行相同的应用程序以实现可扩展性,但不希望发生竞争条件。我的应用程序使用一些 SQS 更改事件并将它们应用到 oracle 存储。请建议使用什么机制。 SELECT FOR UPDATE 在这种情况下会起作用吗?

最佳答案

选择更新会锁定该行并保留它供您更新,但不会阻止其他人读取它。我想你可能想重新考虑这个想法。想象一下,根据有多少人碰巧查看某些数据,无论他们是否决定更新数据,表中的所有报告或所有查询都具有不一致的数字?

或者,如果其他用户查询但看不到该行 - 他们是否会尝试插入该行,而您最终会遇到唯一键约束或处理重复的数据?

或者,如果我查询某个内容并看到它,然后重新查询,它就会消失,因为其他人查询了它 - 我对该应用程序有多大信心?

如果有人去度假但忘记关闭应用程序 - 为其他人留下一周“丢失”的行,会发生什么?

您可能想研究乐观锁定来处理竞争条件。是的,实现起来很困难,但比拥有一个提供不一致结果的应用程序更好!或者,您可以在两种模式下操作屏幕 - 显示和编辑。用户单击“编辑”,您重新获取更新,进行编辑,然后提交更改或放弃编辑。然而,这种技术已经很少使用,因为如果事务未解决,它通常会导致行甚至整个表被锁定,这可能需要 DBA 干预来修复。

关于java - Oracle Java - 如何锁定一行以使其他进程无法读取它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39533488/

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