事务

时序数据的某些场景,如物联网中的数据采集,丢失一部分数据并不会带来严重的后果。但作为一个分布式数据库,保证各节点上的数据一致性非常关键。DolphinDB提供了事务机制,能够确保每次操作的原子性、数据的强一致性、读写操作之间的隔离性以及已写入数据的持久性。

  • 原子性

事务是一个原子操作单元,数据写入要么全都执行,要么全都不执行。比如,写入的数据涉及到多个分区,要么全部分区写入成功,要么全部分区写入失败。如果数据有多个副本,要么所有副本写入成功,要么所有副本写入失败。日志记录着事务执行的所有操作,回滚时系统会反向执行这些操作。

  • 一致性

DolphinDB的一个事务可以包含对不同分区的写入操作,事务成功或回滚,每个分区的各个副本的状态总是一致的。在集群模式中,DolphinDB还能确保某一时刻任何节点上查询得到的数据都是一致的。

  • 隔离性

DolphinDB通过多版本并发控制机制(MVCC, Multi-Version Concurrency Control)进行读写分离。每进行一次写入或删除操作,数据库的版本号都会增加。如果事务成功(commit),原先的版本会被覆盖,反之则回滚(roll back)。当用户同时对数据库进行读写操作时,读和写的并发事务会相互隔离。下图中,在T1时间点开始写入任务,此时系统为该事务分配一个新的版本Version1,在T2、T3时间点提交读取任务,由于T1事务还没结束,因此T2和T3事务读取的是Version1之前的版本Version0。T1事务成功,T4时间点提交的读取任务访问的版本为Version1。

../../_images/transaction01.png
  • 持久性

事务完成后,它对数据的操作是永久性的。

DolphinDB的一个事务不能同时包含读写操作,不能同时对一个分区进行写入操作,也不能同时对多表进行操作。