php - 两个数据库和一个更新

标签 php mysql concurrency sphinx daemon

我正在使用 Sphinx RT 索引和 MySQL DB,我现在遇到的问题是我需要数据保持一致,并且对它们使用常规插入并不是正确的方法,因为我可能会结束错误的索引数据或错误的数据库数据。

假设 MySQL 数据库中有下表

id, text
1, test is test

RT 指数与您相同

id, text

这里可能发生的典型竞争条件是两个用户同时更新内容时。

因此,如果用户 A 使用以下文本进行更新

feeling good

用户 B 使用以下文本更新

nice whether 

可能发生的许多事情之一就是这样

Update RT index with user A text 
Update DB table with user B text
Update RT index with user B text
Update DB table with user A text

所以现在当有人搜索文本时,他将从数据库中不存在的索引中获得结果。

中间有一个守护进程可以接收来自 PHP 页面的 UDP 请求并更新数据库吗?类似下面的内容

php page --send both requests via UDP--> dameon 
php page <--send successful receive via UDP-- dameon 
daemon --send two MySQL updates request --> MySQL

最佳答案

我会用 mysql 锁来解决这个问题。在进行 mysql 更新之前锁定表。仅当您也将更新发送到 sphinx 后才释放锁定。

如果您有大量并发更新,则可能无法扩展,但对于适度的更新率应该可以正常工作。

关于php - 两个数据库和一个更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17496478/

相关文章:

php - PDO语法错误

重复非锁定条件信号的 Java 抽象

.net - 非并发集合在并发集合中安全吗?

c# - 从多个线程修改 Entity Framework 实体

php - 防止用户在页面刷新时重新单击 "Like"按钮

php - Google Analytics PHP API (GAPI) - 获取页面浏览量

javascript - 将 Javascript 表发送到 PHP

php - 了解用于大型数据库/表的 MySql?

mysql - SQL 根据另一个表中的日期范围查找表中日期的位置

php - 准备好的语句绑定(bind)参数错误