聊聊数据库中的 savepoint
原文中文,约2800字,阅读约需7分钟。发表于: 。故事要从全局二级索引开始讲起。 当我们构建了一个全局二级索引之后,一条逻辑上的数据插入,就会变成两条物理上的数据插入:一条插入到主表,另一条插入到索引表。为了保证主表和索引表数据的一致性,我们往往需要开启分布式事务,再并行地插入两条数据。如果其中一条数据插入失败了,比如索引上出现了唯一键冲突,但主表的数据已经插了进去,怎么办呢?
构建全局二级索引时,开启分布式事务并并行插入数据以保证一致性。使用savepoint回滚插入失败的数据,而不是整个事务。PolarDB-X通过设置auto-savepoint实现回滚单条逻辑SQL的功能。通过减少设置savepoint的次数和使用私有协议来减轻代价。