我正在使用 Sphinx RT 索引和 MySQL DB,我现在遇到的问题是我需要数据保持一致,并且在它们两者上使用常规插入不是正确的方法,因为我最终可能会出错索引数据或错误的数据库数据。
假设您在 MySQL DB 中有下表
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