我正在考虑将galera active与5个mysql节点一起使用。这些节点位于负载平衡器的后面,应用程序可以写入任何节点。
我的应用程序每秒大约读取/写入/更新同一个表1000次。写入的数据量通常在100k左右。
典型的db逻辑如下:
(1) 执行选择以查看数据库中是否存在数据
(2) 如果没有,请插入数据
(3) 更多处理
(4) 更新一些数据
select(1)每天将发生7500万次。插入(2)和更新(4)每天大约100万次。
答。我认为galera会不断地锁定表,导致写操作和更新速度变慢,这是对的吗?
b。我认为节点之间的数据同步可能需要几秒钟或更长时间,因此select(1)可能会报告数据尚未插入,但实际上已插入(2),但尚未与所有节点同步?
1条答案
按热度按时间sr4lhrrt1#
首先,要知道(1)只能是咨询性的。也就是说,(1)可能会说“数据不存在”,但是(2)会发现数据存在。否则,直到
COMMIT
?请在您的列表中添加任何
START TRANSACTION
以及COMMIT
. 同时,我将假设整个4个步骤都在一个事务中,尽管我建议将(1)放在事务之外。节点之间的距离(ping时间)有多远?如果他们在同一栋楼,同步可能只需要毫秒(我说“可能”是因为每秒1k的动作可能会有点压力。)
我认为这可能是最好的:
也就是说,放弃追求完美(一次测试100%)。相反,玩一个数字游戏,这样你通常会做最佳的事情,但然后抓住奇怪的情况不太频繁,足以不损害性能明显。