NoSQL没落了?NewSQL有机会挑大梁吗?
|
并发控制从实现思路维度可以分为如下三类:
并发控制从实现方式维度可以分为如下几种:
2PL(two-phase locking):事务在执行期间被明确的划分为growing和shrinking阶段,growing阶段只能持有锁不能释放锁;shrinking阶段只能释放锁不能持有锁,仅满足可恢复性; S2PL(strict two-phase locking):在满足2PL的前提下,要求持有的排它锁必须在事务提交后才释放,避免了级联回滚; SS2PL(strong strict two-phase locking):在满足2PL的前提下,要求事务提交之前不得释放任何锁,保证了严格性。
在事务开始时生成一个单调递增的时间戳,数据项上维护最近读时间戳和最近写时间戳。每次读写操作,系统都会将事务时间戳与数据项上的时间戳进行检查,对于任意读写操作,如果事务时间戳小于数据项的最近写时间戳,则将事务回滚;对于写操作,如果事务时间戳小于数据项的最近读时间戳,则将事务回滚;如果都满足,则继续访问下一个数据项。
事务的生命周期被划分为三个阶段,将串行化检测推迟到提交阶段: 读阶段:事务写操作仅是对事务私有空间中数据的更新,并不对数据库中的数据项进行真实的更新,保证读阶段没有任何事务冲突及锁开销; 验证阶段:检测事务是否满足串行化隔离级别; 写阶段:将事务私有空间中的更新数据写入数据库。
每一次写操作会生成一个新的数据项版本,数据项的版本号可以使用事务的时间戳或事务号;系统维护多个数据版本,读操作根据所在事务的时间戳或事务号能够读到指定的版本,做到读-写或写-读操作不阻塞,写-写操作的冲突依赖2PL实现。 上述只是传统数据库时代总结的并发控制技术,在分布式场景下一般会采用MVCC与其它并发控制技术的组合,目的是提高并发度,减小同步开销。 四、悲观还是乐观在了解了数据库的基本并发控制技术后,本章针对现今感兴趣的生产级NewSQL分布式数据库使用的并发控制技术进行了简单的总结: ![]() 由上表可以看出,FoundationDB是第一个使用OCC技术实现ACID事务的生产级数据库系统(严格地说,Google的MegaStore也使用了OCC并用于Google APP Engine等业务,但它的ACID事务实现仅作用于单个分区)。 (编辑:网站开发网_安阳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


