gpt4 book ai didi

php - 锁定 MySql 表或数据以防止获取相同的数据

转载 作者:行者123 更新时间:2023-11-29 18:18:22 25 4
gpt4 key购买 nike

我有一个包含 100 万个条目的数据库和 3 个处理数据的程序。这 3 个程序通过 api 调用获取数据。例如,每个请求 100 个条目。防止程序获得相同的 100 个条目的最佳方法是什么?

我尝试将每个程序的 ID 更新到数据库,但这并不能解决问题。因为如果 3 个程序从一个仍在运行的程序请求数据和更新,则其他程序可能会获取相同的数据。

我尝试过锁定表,但它是我数据库中的主表。因此 php 等所有其他进程也极度减慢。因为表每隔几分钟就会完全锁定。

最佳答案

app_id 列怎么样。

应用程序 1 执行此操作...

UPDATE table SET app_id=3 where app_id=NULL LIMIT 100
SELECT * FROM table WHERE app_id=1 LIMIT 100
----process and when done----
UPDATE table SET app_id=NULL where app_id=1 LIMIT 100

应用程序 2 执行此操作...

UPDATE table SET app_id=2 where app_id=NULL LIMIT 100
SELECT * FROM table WHERE app_id=2 LIMIT 100
----process and when done----
UPDATE table SET app_id=NULL where app_id=2 LIMIT 100

您可以拥有无​​限的应用程序,并且它们应该只获取自己的记录。这对你的数据库打击更大。也许您可以根据您的架构使用内存缓存/存储过程的组合来限制数据库负载。

另一个选项也许能够通过 API 来处理这个问题。您可以创建一个系统范围的全局变量并存储哪些应用程序有哪些记录。每当调用 API 时,它都会查看系统范围的变量,以了解是否可以获得数据或从哪些记录开始。这在数据库上可能更容易。

关于php - 锁定 MySql 表或数据以防止获取相同的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46807304/

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