我有一个包含100万个条目的数据库和3个处理数据的程序。 3个程序通过api调用获取数据。例如,每个请求有100个条目。防止程序获得相同的100个条目的最佳方法是什么?
我尝试将每个程序的id更新为数据库,但是没有解决问题。因为如果3个程序请求数据并且从一个程序更新仍在运行,则可能是其他程序获得相同的数据。
我试过 LOCK TABLES ,但它是我数据库中的维护。所以来自php的所有其他进程也极其缓慢。因为桌子每隔几分钟就被锁定一次。
答案 0 :(得分:0)
app_id列如何?
App 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
App 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
您可以拥有无限的应用,他们应该只获得自己的记录。这有点打击你的数据库更难。也许您可以使用memcache /存储过程的组合来限制数据库负载,具体取决于您的体系结构。
另一个选项可能能够通过API处理此问题。您可以创建系统范围的全局变量并存储哪些应用程序具有哪些记录。无论何时调用API,它都会查看系统范围的变量,以了解它是否可以获取数据或从哪个记录开始。这在DB上可能更容易。