大部分关系数据库宣称与NoSQL的区别是%支持ACID事务,在现实中,很少有关系数据库包括Oracle能提供正式的ACID保证,即使他们宣传自己是提供真正ACID。
那么,谁在撒谎呢?
文章Whenis“ACID”ACID?Rarely.
PeterBailis认为:
ACID的教科书正式定义隔离是串行化serializability,即执行一组事务的结果应该相当于这些事务的串行执行,这就意味着每个操作数据库的事务好像只有它们自己一样,这能确保数据库的正确性和一致性,带有串行化的数据库(ACID中I)提供了任意读写事务并且确保一致性(ACID中的C)或正确性,没有串行化,ACID(特别是一致性)将无法得到保证。
大部分提供ACID的数据库并不提供串行化,作者在文章中列出了18种数据库中默认的只有三个提供串行化(defaultisolation列),只有9个将串行化作为选项提供(MaximumIsolation列):
图中标注S的表示提供串行化,RC表示read