对于连续读写的单个表,galera active有哪些风险?

6jygbczu  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(317)

我正在考虑将galera active与5个mysql节点一起使用。这些节点位于负载平衡器的后面,应用程序可以写入任何节点。
我的应用程序每秒大约读取/写入/更新同一个表1000次。写入的数据量通常在100k左右。
典型的db逻辑如下:
(1) 执行选择以查看数据库中是否存在数据
(2) 如果没有,请插入数据
(3) 更多处理
(4) 更新一些数据
select(1)每天将发生7500万次。插入(2)和更新(4)每天大约100万次。
答。我认为galera会不断地锁定表,导致写操作和更新速度变慢,这是对的吗?
b。我认为节点之间的数据同步可能需要几秒钟或更长时间,因此select(1)可能会报告数据尚未插入,但实际上已插入(2),但尚未与所有节点同步?

sr4lhrrt

sr4lhrrt1#

首先,要知道(1)只能是咨询性的。也就是说,(1)可能会说“数据不存在”,但是(2)会发现数据存在。否则,直到 COMMIT ?
请在您的列表中添加任何 START TRANSACTION 以及 COMMIT . 同时,我将假设整个4个步骤都在一个事务中,尽管我建议将(1)放在事务之外。
节点之间的距离(ping时间)有多远?如果他们在同一栋楼,同步可能只需要毫秒(我说“可能”是因为每秒1k的动作可能会有点压力。)
我认为这可能是最好的:

(1) See if row exists -- 98% of the time, this will avoid doing the rest.
BEGIN;
(2), (3), (4);  -- check after each step; 1% of collisions will be caught here
COMMIT;  -- again check; still another 1% get caught here.

也就是说,放弃追求完美(一次测试100%)。相反,玩一个数字游戏,这样你通常会做最佳的事情,但然后抓住奇怪的情况不太频繁,足以不损害性能明显。

相关问题