我们正在为我们的应用程序评估MariaDB Galera集群。据我所知,集群支持行级和语句级复制。我们倾向于行级复制。我们的数据模型具有彼此相关的多个实体。我们将在实体之间建立外键关系。
想了解我们是否采用基于行的复制,集群将如何处理以下情况。
1>群集有3个节点
2 - ;有班级和学生等实体。在这里我们有一个外键学生 - >类
3>我们得到两个节点(N1和N2)从两个不同的交易中获得两个单独的更新
A)在时间t1:节点N1分别为特定类别c1和c2的学生(s1和s2)插入。
B)在时间t2:从节点N2中删除类c1
C)在时间t3:更改(学生s1和s2的添加)从N1推送到N2
涉及学生加入的整个交易是否会被回滚?
答案 0 :(得分:2)
仅限RBR 。
在COMMIT
时,您必须检查错误。这是与其他节点检查冲突的时间。
也就是说,一个节点可能没有冲突,只是发现(在COMMIT
)该节点上看起来不错的东西会与其他节点上同时发生的事件发生冲突。
通常,只要您遇到“死锁”,只需重新运行整个交易即可。它可能会第二次工作(或遇到其他一些错误,因为远程事务使它成为当前节点)。