CockroachDB架构——存储层

CockroachDB架构的存储层对磁盘数据进行读写。
--注意:
1)如果您还没准备好,我们推荐您阅读架构概览。

一.概览
每个CockroachDB节点包含至少一个store,其在节点启动时指定,其是CockroachDB进程在磁盘上读写数据的地方。
数据通过RocksDB以键值对存储于磁盘,RocksDB主要以黑盒API被处理,每个store包含两个RocksDB实例:
1)一个用于存储临时分布SQL数据。
2)一个用于节点上的所有其他数据。
此外,还有一个块缓冲在一个节点的所有stores间共享。这些stores反过来拥有范围副本的集合。一个范围的多个副本从来不会放在相同store上或者甚至同一个节点上。
1.与其他层的交互
CockroachDB中,存储层与其他层的关系如下:
1)从复制层进行成功的读写。

二.组件
1.RocksDB
CockroachDB使用RocksDB——一个嵌入式键值store——对磁盘数据进行读写。您能在RocksDB Basics GitHub页上发现更多的信息。
RocksDB与CockroachDB集成的很好主要有以下几个原因:
1)键值store,其简化了到我们键值层的映射。
2)原子写批和快照,其给我们一个事务子集。
底层RocksDB引擎通过前缀压缩保证了键值的高效存储。
2.MVCC
CockroachDB很大程度上依赖于多版本并发控制(MVCC)来处理并发请求和保证一致性。这其中很多工作通过使用混合逻辑时钟(HLC)时间戳来区分数据的版本,跟踪提交时间戳,及表示一个数值的垃圾收集过期时间。所有这些MVCC数据都被存储于RocksDB中。
不管存储层的实施,MVCC数值广泛用于强制事务层的一致性。例如:CockroachDB维护一个时间戳缓冲,其存储键值最近被读的时间戳。如果写操作发生的时间戳比该读时间戳缓冲中的最大值还小,其表示有一个潜在的异常,且该事务必须以更晚的时间戳重新开始。
1)时间旅行(Time-travel)
像在SQL:2011标准中描述的,CockroachDB支持时间旅行查询(通过MVCC开启)。
为了做到这点,所有的模式信息背后也有一个类MVCC模型。这让您执行SELECT...AS OF SYSTEM TIME,且CockroachDB使用当时的模式信息来定制查询。
使用这些工具,您能从数据库获得早至垃圾收集时间的一致性数据。
3.垃圾收集
CockroachDB定期对MVCC数值进行垃圾收集以减少磁盘上存储数据的大小。为了做到这点,当一个时间戳比垃圾收集时间更早的新MVCC值出现时,我们将对旧的MVCC数值进行压缩。垃圾收集时间能在集群、数据库或表级别通过配置gc.ttlseconds复制区域变量进行设置。复制区域相关的更多信息,请参考配置复制区域。
1)保护时间戳
从v20.1开始,垃圾收集仅对不被保护时间戳覆盖的MVCC数值进行。保护时间戳子系统是为了确保依赖于历史数据操作的安全,像:
a)导入(Imports),包括IMPORT INTO。
b)备份。
c)数据更新捕获(CDC)(又名改变输送(changefeeds))。
d)在线模式改变。
保护时间戳确保开启较短GC TTL时历史数据的安全。较短GC TTL意味着更少的MVCC数值被保留。 这也许有助于降低全天频繁更新数据行负载的查询执行成本,因为,SQL层必须扫描之前的MVCC数值来发现一个数据行的当前数值。
a)保护时间戳的工作原理
保护时间戳通过创建保护记录进行工作,这些记录存储于内部系统表中。当长期运行的类似备份的作业想保护某个时间戳的数据不被垃圾收集时,其创建一个与数据和时间戳相关的保护记录。
成功创建保护记录后,时间戳小于或等于保护时间戳的特定数据的MVCC数值不会被垃圾收集。当创建保护记录的作业完成其工作后,其将移去该记录,允许垃圾收集器对先前保护的数值进行垃圾收集。

三.与其他层的交互
1.存储和复制层
存储才能从Raft日志向磁盘提交写,也将请求的数据(即,读)返回复制层。

四.个人观点
1)很多NewSQL分布式数据库几乎都用了RocksDB,这个多说。
2)分布式数据库来讲,存储层不可或缺,虽然,很多都用了RocksDB,但实现机制大同小异。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
CockroachDB (蟑螂数据库)是一个可伸缩的、支持地理位置处理、支持事务处理的数据存储系统,和谷歌的F1系统类似,支持分布式事务等特性。。CockroachDB 提供两种不同的的事务特性,包括快照隔离(snapshot isolation,简称SI)和顺序的快照隔离(SSI)语义,后者是默认的隔离级别。        为了保证在线的百万兆字节流量业务的质量,Google开发了Spanner系统,这是一个可扩展的,稳定的,支持事务的系统。许多参与开发CockroachDB的团队现在都服务于开源社区。就像真正的蟑螂(cockroach)一样,CockroachDB可以在没有数据头、任意节点失效的情况下正常运行。这个开源项目有很多富有经验的贡献者,创始人们通过社交媒体、Github、网络、会议和聚会结识他们并鼓励他们参与其中    蟑螂是一个分布式的K/V数据仓库,支持ACID事务,多版本值存储是其首要特性。主要的设计目标是全球一致性和可靠性,从蟑螂的命名上是就能看出这点。蟑螂数据库能处理磁盘、物理机器、机架甚至数据中心失效情况下最小延迟的服务中断;整个失效过程无需人工干预。蟑螂的节点是均衡的,其设计目标是同质部署(只有一个二进制包)且最小配置。    蟑螂数据库实现了单一的、巨大的有序映射,键和值都是字节串形式(不是unicode),支持线性扩展,理论上支持4EB的逻辑数据)。映射有一个或者多个Range组成,每一个Range对应一个把数据存储RocksDB(LevelDB的一个变种,Facebook贡献)上的K/V数据库,并且复制到三个或者更多蟑螂服务器上,Range定义为有开始和结束键值的区间。Range可以合并及分裂来维持总大小在一个全局配置的最大最小范围之间。Range的大小默认是64M,目的是便于快速分裂和合并,在一个热点键值区间快速分配负载。Range的复制确定为分离的数据中心来达到可靠性(比如如下分组:{ US-East, US-West, Japan }, { Ireland, US-East, US-West}, { Ireland, US-East, US-West, Japan, Australia })    Range有一种变化,通过分布式一致性算法实例来调节确保一致性,蟑螂所选择使用Raft一致性算法。所有的一致性状态存在于RocksDB中。项目官网地址:http://www.cockroachdb.cn/ 标签:蟑螂数据库  国人开源
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lhdz_bj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值