繁体   English   中英

两个数据库和一个更新

[英]Two databases and one update

我正在使用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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM