2 ScyllaDB
号称下一代 NoSQL,C++编写充分利用 Linux 底层原语优势,利用现代多核、多处理器 NUMA 服务器硬件,卓越性能,API 兼容 Cassandra 和 DynamoDB:
- 支持和 Cassandra 一样的 CQL 查询语言和驱动,一样的 SSTable 存储格式
- 同样支持和 DynamoDB 一样的 JSON-style 查询和驱动
2.1 架构
2.1.1 ScyllaDB 服务架构
ScyllaDB服务架构图:
Cluster(集群):Cluster 是一组相互连接的 Node(节点)组成,这些节点组织成虚拟的环架构。节点间都是平等的关系,没有定义领导者。这样就不会出现单点故障,可以使用多数据中心将数据复制到地理位置上分散的各集群中。
Node(节点):Node 可以是本地服务器,或者是公有云的虚拟机等。整个集群的数据尽可能均匀的分布在这些节点上。此外,ScyllaDB 使用称为虚拟节点 (vNode) 的逻辑单元来更好地分布数据以获得更均匀的性能。 集群可以在不同节点上存储相同数据的多个副本以确保可靠性。
Shard(分片):ScyllaDB 进一步划分数据,通过将节点中总数据的片段分配给特定 CPU 及其关联的内存 (RAM) 和持久存储(例如 NVMe SSD)来创建分片。分片主要作为独立运行的单元运行,称为“无共享”设计。 这大大减少了争用以及对昂贵的处理锁的需求。
2.2 ScyllaDB 数据架构
ScyllaDB 根据其数据模型,我们一般将其称为“宽列”数据库,有时也被称为“key-key-value” 数据库反映其分区键和集群键,其数据架构图如下:
Keyspace(键空间): 数据的顶级容器(表的集合):定义 ScyllaDB 中保存的数据的复制策略和复制因子 (RF)。例如,用户可能希望存储相同数据的两个、三个甚至更多副本,以确保在一个或多个节点丢失时其数据仍然安全。
Table(表):在键空间内,数据存储在单独的表中。 表是由列和行组成的二维数据结构。 与 SQL RDBMS 系统不同,ScyllaDB 中的表是独立的, 不能跨表进行 JOIN。
Partition(分区):ScyllaDB 中的表可能非常大,通常以 TB 为单位。 因此,表被分为更小的块(称为分区),以便尽可能均匀地分布在分片上。
Rows(行):每个分区包含按特定顺序排序的一行或多行数据。 并非每一列都出现在每一行中。 这使得 ScyllaDB 能够更有效地存储所谓的“稀疏数据”。
Colums(列):表行中的数据将分为列。 特定的行和列条目将被称为单元格。 某些列将用于定义数据的索引和排序方式,称为分区键和聚类键
ScyllaDB 包含查找可能导致性能问题的特别大分区和大行的方法。 ScyllaDB 还将最常用的行缓存在基于内存的缓存中,以避免在所谓的“热分区”上进行昂贵的基于磁盘的查找。
2.3 环架构
Ring Architecture 的示意图如下:
Ring(环):ScyllaDB 中的所有数据都可以可视化为令牌范围环,每个分区映射到单个散列令牌(相反:一个令牌可以与一个或多个分区关联)。这些令牌用于在集群中分发数据,在节点和分片之间尽可能均匀地平衡数据。
vNode(虚拟节点):该环被分成 vNode(虚拟节点),其中包含分配给物理节点或分片的一系列令牌。 根据为键空间设置的复制因子 (RF),这些 vNode 在物理节点上复制多次。
标签:令牌,分区,ScyllaDB,详解,分片,数据,节点 From: https://blog.51cto.com/JavaEdge/7995245