ACID
datomic数据库的事务是ACID的:Atomic(原子性),Consistent(一致性),Isolated(隔离性),Durable(持久性)。
原子性
原子性要求每一个事务要么就全部执行,要么就全不执行。如果事务中某部分操作失败,那么整个事务也就失败,数据库应该没有任何变化。
datomic的事务(transaction)在被写入到持久储存的数据库的过程,是一个原子性写操作,所以能够保证其原子性;而在每一个客户端(peer)的程序内部,datomic是存在于内存中的(这是datomic数据库高性能的一个重要因素)。内存中的datomic使用的是一个不可变数据结构,同时,对它的每个更新操作都是在一个原子性操作中完成。
一致性
一致性确保任何事务能够将数据库从某一合法状态改变到另一种合法状态。
datomic通过以下途径保证一致性:
- 每个客户端(peer)将已完成的事务看作是一个特殊的时间点,我们称之为时间戳(time basis)。
- 在一个系统中,事务的时间戳(time basis)是事务在该系统中的一个全局性的指令(ordering),所有的客户端总是能够看到该时间戳之前(包含该时间戳)的所有事务(也就是说,datomic的所有事务都被存储),并且所有的事务都是按时间顺序排列的。
另外,datomic还提供了一些类用于访问这些时间戳信息:
- 每个存储于datomic数据库中的事实(fact)都知道组成datom的每个事务的时间戳。
- 每个数据库值(注:datomic设计哲学中