cockroach官方文档翻译---2.6 存储层

xiaoxiao2021-02-28  27

2.6 存储层

CockroachDB架构将数据读写在磁盘上

**概要

--与其他层的交互

**组件

--RocksDB

--MVCC

--垃圾收集

**与其他层的交流

--存储层与复制层

2.6.1 概要

每个cockroachDB包含至少一个存储,当节点启动,cockroach进程在磁盘中读写数据。

这个数据以KV对形式存储在磁盘上使用RocksDB,被视为一个黑箱的API,每个节点包含三个rocksDB的实例

--一个为raftlog服务

--一个存储当前的分布式SQL数据

--一个为其他节点数据服务

例外,在一个节点的所有存储共享一个block缓存。这些存储按顺序获取有range副本,一个range的多个副本不会放在相同的存储中,甚至不会放在相同的节点。

**与其他层的交互

存储层:

从复制层成功的读写。

2.6.2 组件

**RocksDB

CockroachDB使用RocksDB---一种内含的KV存储引擎从磁盘中读写数据。你可以在RocksDB基本的Github页面找到更多信息,

https://github.com/facebook/rocksdb/wiki/RocksDB-Basics

RocksDB聚合的很好由于以下原因:

--KV存储,使它很容易映射KV

--原子批量写和快照,提供了事务的子集。

**MVCC

CockroachDB严重依赖于多版本并发管理(MVCC)处理并发请求保证一致性。很多工作使用HLC时间戳(混合逻辑时钟)是比我不同版本的数据,跟踪提交时间戳,识别过期值垃圾回收。MVCC数据存储在RocksDB

 

MVCC

https://en.wikipedia.org/wiki/Multiversion_concurrency_control

 

虽然MVCC在存储层实现,MVCC值在事务层广泛使用,例如cockroachDB包括时间戳缓存,存储key的最新时间戳。如果写操作发生在比读时间戳缓存更低的时间戳。这时发生了一个潜在的异常,事务必须使用最新的时间戳重启。

--Time-Travel(穿越)

2011SQL标准中,cockroach支持穿越query(MVCC支持)

为了使用这个,所有的schema信息也有类似于MVCC的模型。可以select… as of system timecockroachDB利用自那时起的schema信息规划query

使用这些组件,我们获得数据库的一致性数据,直到进入垃圾回收阶段。

**垃圾回收

CockroachDB周期性进行垃圾回收MVCC值,减少磁盘中的数据存储大小。带有时间戳新的MVCC的值比垃圾回收阶段旧,将压缩旧的MVCC值。默认的垃圾回收阶段是24小时,通过复制区域可以被设置为集群,数据库,表级别。

2.6.3 与其他层交互

**存储层和复制层

存储层提交将写操作从raft日志中提交到disk,存储层返回请求(如读请求)数据到复制层。

转载请注明原文地址: https://www.6miu.com/read-1950046.html

最新回复(0)