gpt4 book ai didi

database - 两个线程同时添加新行 - 如何防止?

转载 作者:搜寻专家 更新时间:2023-10-30 19:55:28 25 4
gpt4 key购买 nike

在我的应用程序中,我有几个执行某些逻辑的线程。最后,他们向某个表中添加了新行。

在添加新行之前,他们会检查是否不存在具有相同详细信息的先前条目。如果找到 - 他们更新而不是添加。

问题是当某个线程 A 进行检查时,发现不存在具有相同详细信息的先前实体,并且就在他添加新行之前,线程 B 在数据库中搜索相同的实体。线程 B 看到不存在这样的实体,因此他也添加了新行。

结果是表中有两行数据相同。

注意:没有违反表键,因为线程在添加行之前获取下一个序列,表键是一些与数据无关的ID。

即使我将更改表键使其成为数据的组合,它也会防止两行具有相同的数据,但当第二个线程尝试添加行时会导致数据库错误。

预先感谢您的帮助,罗伊。

最佳答案

您应该使用队列,可能是阻塞队列。线程 A 和 B(生产者)将对象添加到队列中,另一个线程 C(消费者)将轮询队列并从队列中删除最旧的对象,将其持久保存到数据库中。这将防止 A 和 B 同时想要持久化相同对象时的问题

关于database - 两个线程同时添加新行 - 如何防止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1158249/

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