加入收藏 | 设为首页 | 会员中心 | 我要投稿 网站开发网_安阳站长网 (https://www.0518zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

NoSQL没落了?NewSQL有机会挑大梁吗?

发布时间:2019-01-31 05:02:05 所属栏目:站长百科 来源:龙逢
导读:副标题#e# 2018年4月20日,苹果宣布开源FoundationDB一款支持多种数据模型、高性能、高可用、可扩展,且具备ACID事务的分布式KV NoSQL系统。FoundationDB已在苹果公司内部的生产环境使用三年,主要用于iCloud上的云存储服务。 苹果于2015年收购开源的Founda

并发控制从实现思路维度可以分为如下三类:

  • 乐观:重在事后检测,在事务提交时检查是否满足隔离级别。满足,则提交;否则回滚并自动重新执行。
  • 悲观:重在事前预防,在事务执行时检查是否满足隔离级别。满足,则继续执行;否则等待或回滚。
  • 半乐观:混合使用乐观和悲观技术实现事务并发控制。

并发控制从实现方式维度可以分为如下几种:

  • 基于锁的并发控制

2PL(two-phase locking):事务在执行期间被明确的划分为growing和shrinking阶段,growing阶段只能持有锁不能释放锁;shrinking阶段只能释放锁不能持有锁,仅满足可恢复性;

S2PL(strict two-phase locking):在满足2PL的前提下,要求持有的排它锁必须在事务提交后才释放,避免了级联回滚;

SS2PL(strong strict two-phase locking):在满足2PL的前提下,要求事务提交之前不得释放任何锁,保证了严格性。

  • 基于时间戳的并发控制

在事务开始时生成一个单调递增的时间戳,数据项上维护最近读时间戳和最近写时间戳。每次读写操作,系统都会将事务时间戳与数据项上的时间戳进行检查,对于任意读写操作,如果事务时间戳小于数据项的最近写时间戳,则将事务回滚;对于写操作,如果事务时间戳小于数据项的最近读时间戳,则将事务回滚;如果都满足,则继续访问下一个数据项。

  • 基于OCC的并发控制

事务的生命周期被划分为三个阶段,将串行化检测推迟到提交阶段:

读阶段:事务写操作仅是对事务私有空间中数据的更新,并不对数据库中的数据项进行真实的更新,保证读阶段没有任何事务冲突及锁开销;

验证阶段:检测事务是否满足串行化隔离级别;

写阶段:将事务私有空间中的更新数据写入数据库。

  • 基于多版本的并发控制

每一次写操作会生成一个新的数据项版本,数据项的版本号可以使用事务的时间戳或事务号;系统维护多个数据版本,读操作根据所在事务的时间戳或事务号能够读到指定的版本,做到读-写或写-读操作不阻塞,写-写操作的冲突依赖2PL实现。

上述只是传统数据库时代总结的并发控制技术,在分布式场景下一般会采用MVCC与其它并发控制技术的组合,目的是提高并发度,减小同步开销。

四、悲观还是乐观

在了解了数据库的基本并发控制技术后,本章针对现今感兴趣的生产级NewSQL分布式数据库使用的并发控制技术进行了简单的总结:

NoSQL没落了?NewSQL有机会挑大梁吗?

由上表可以看出,FoundationDB是第一个使用OCC技术实现ACID事务的生产级数据库系统(严格地说,Google的MegaStore也使用了OCC并用于Google APP Engine等业务,但它的ACID事务实现仅作用于单个分区)。

(编辑:网站开发网_安阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!