在 SequoiaDB 巨杉数据库中,单条记录的操作是原子性的,因此对单条记录的操作不需要事务。然而,在许多应用场景中存在对更新多条记录时的原子性需求以及读取多条记录时的一致性需求。SequoiaDB 通过跨复制组的分布式事务对上述需求提供了支持。
事务提供了一种“要么全做,要么什么都不做”的机制。当事务被提交给了数据库,则数据库需要确保该事物中的所有操作都成功完成且其结果被永久保存在数据库中。如果事务中的任何一个操作没有成功完成,则事务中的所有操作都需要回滚到事务执行前的状态。
事务是数据库执行过程中的一个逻辑单元,由一个有限的数据库读/写操作序列组成。事务有两个目的:
事务是恢复和并发控制的基本单位。数据库事务拥有以下四个特性,通常称为 ACID 特性:
SequoiaDB 事务中的操作只能是插入数据、修改数据以及删除数据,在事务过程中执行的其它操作不会纳入事务范畴,也就是说事务回滚时非事务操作不会被执行回滚。如果一个表或表空间中有数据涉及事务操作,则不允许删除该表或表空间。
在 SequoiaDB 中,默认情况下事务是开启的。关闭事务需要在目标节点上修改相关的事务配置。
SequoiaDB 的事务日志记录了事务对数据库的所有更改,是备份和恢复的重要组件。
原子性是数据库事务的最基本能力。事务必须确保在一个数据库会话中,从事务的开始到结束之间所有的操作为一个原子单元,不允许出现事务中的一部分成功,而另一部分失败的场景。
隔离性是避免在多个同时执行的事务操作会话之间出现相互干扰的机制。目前,SequoiaDB 支持三种隔离级别:
详细可参考隔离级别。
作为分布式数据库,SequoiaDB 将数据分布式存储在一台或多台物理设备中。当事务中的操作发生在不同物理设备中时,SequoiaDB 使用二阶段提交机制实现分布式事务,支持跨表跨节点的事务原子操作。
事务操作可参考 SQL 应用开发的事务操作和 JSON 应用开发的事务操作。
SequoiaDB 事务支持的操作:
Note:
count 查询操作只支持 RU 和 RC 隔离级别。