首页 > 其他分享 >ScyllaDB详解

ScyllaDB详解

时间:2023-10-23 23:32:25浏览次数:31  
标签:令牌 分区 ScyllaDB 详解 分片 数据 节点

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” 数据库反映其分区键和集群键,其数据架构图如下:

img

Keyspace(键空间): 数据的顶级容器(表的集合):定义 ScyllaDB 中保存的数据的复制策略和复制因子 (RF)。例如,用户可能希望存储相同数据的两个、三个甚至更多副本,以确保在一个或多个节点丢失时其数据仍然安全。

Table(表):在键空间内,数据存储在单独的表中。 表是由列和行组成的二维数据结构。 与 SQL RDBMS 系统不同,ScyllaDB 中的表是独立的, 不能跨表进行 JOIN。

Partition(分区):ScyllaDB 中的表可能非常大,通常以 TB 为单位。 因此,表被分为更小的块(称为分区),以便尽可能均匀地分布在分片上。

Rows(行):每个分区包含按特定顺序排序的一行或多行数据。 并非每一列都出现在每一行中。 这使得 ScyllaDB 能够更有效地存储所谓的“稀疏数据”。

Colums(列):表行中的数据将分为列。 特定的行和列条目将被称为单元格。 某些列将用于定义数据的索引和排序方式,称为分区键和聚类键

ScyllaDB 包含查找可能导致性能问题的特别大分区和大行的方法。 ScyllaDB 还将最常用的行缓存在基于内存的缓存中,以避免在所谓的“热分区”上进行昂贵的基于磁盘的查找。

2.3 环架构

Ring Architecture 的示意图如下:

img

Ring(环):ScyllaDB 中的所有数据都可以可视化为令牌范围环,每个分区映射到单个散列令牌(相反:一个令牌可以与一个或多个分区关联)。这些令牌用于在集群中分发数据,在节点和分片之间尽可能均匀地平衡数据。

vNode(虚拟节点):该环被分成 vNode(虚拟节点),其中包含分配给物理节点或分片的一系列令牌。 根据为键空间设置的复制因子 (RF),这些 vNode 在物理节点上复制多次。

标签:令牌,分区,ScyllaDB,详解,分片,数据,节点
From: https://blog.51cto.com/JavaEdge/7995245

相关文章

  • 一文详解|支付宝小程序跳转(超详细版)
    开发过程中经常遇到支付宝小程序跳转的问题,这里总结一下支付宝小程序跳转的常见场景和方式,希望可以对大家有所帮助。话不多说,上干货!     支付宝小程序跳转的三种行为支付宝小程序跳转可以拆分为三种行为,即:外部跳转支付宝小程序支付宝小程序内部页面之间跳转......
  • Makefile基础使用和实战详解
    一、基础Makefile其实只是一个指示make程序如何为我们工作的命令文件,我们说Makefile其实是在说make。而对于项目来说,Makefile是指软件项目的编译环境。Makefile的好坏对于项目开发有些什么影响呢?设计得好的Makefile,当我们重新编译时,只需编译那些上次编译成功后修改过的......
  • Go语言代码断行规则详解
    本文深入探讨了Go语言中代码断行的各个方面,从基础概念到实际应用实践。关注【TechLeadCloud】,分享互联网架构、云服务技术的全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业......
  • jenkins 原理篇——pipeline流水线 声明式语法详解
    大家好,我是蓝胖子,相信大家平时项目中或多或少都有用到jenkins,它的piepeline模式能够对项目的发布流程进行编排,优化部署效率,减少错误的发生,如何去写一个pipeline脚本呢,今天我们就来简单看看pipeline的语法。先拿一个helloworld的pipeline脚本举例,我们来看看pipeline脚本的组成......
  • crontab 命令详解非常详细
    crontab命令详解crontab 是一个用于创建、编辑和管理用户的定时任务的命令,它可以让用户在指定的时间自动执行指定的命令或脚本。基本语法crontab[选项]文件名-e:编辑用户的crontab文件;-l:列出用户当前的crontab内容;-r:删除用户的crontab文件;-i:在删除......
  • [GAA系列]详解台积电2纳米制程中的全环绕栅极(Gate-All-Around)晶体管技术
    SectionⅠ半导体技术发展史的本质就是晶体管尺寸的缩小史。从上世纪七十年代的10微米节点开始,遵循着摩尔定律一步一步走到了今天的5纳米。在这一过程中,每当摩尔定律遭遇困境,总会有新的技术及时出现并引领着摩尔定律继续前行。自22纳米节点上被英特尔首次采用,鳍式场效应晶体管(Fin......
  • Go笔记(3)-3种go语言的键盘输入详解
    go语言的键盘输入详解go语言中有三种输入函数,分别是:fmt.Scanf()可以按照指定的格式进行输入fmt.Scanln()通过指针将值赋值给变量fmt.Scan()(1)fmt.ScanScan从标准输入扫描文本,读取空白符分隔的值保存到传递给本函数的参数中,将换行符视为空白符使用......
  • Python 函数:定义、调用、参数、递归和 Lambda 函数详解
    函数是一段代码块,只有在调用时才会运行。您可以将数据(称为参数)传递给函数。函数可以返回数据作为结果。创建函数在Python中,使用def关键字定义函数:示例defmy_function():print("Hellofromafunction")调用函数要调用函数,请使用函数名称后跟括号:示例defmy_function......
  • Python 函数:定义、调用、参数、递归和 Lambda 函数详解
    函数是一段代码块,只有在调用时才会运行。您可以将数据(称为参数)传递给函数。函数可以返回数据作为结果。创建函数在Python中,使用def关键字定义函数:示例defmy_function():print("Hellofromafunction")调用函数要调用函数,请使用函数名称后跟括号:示例defmy_function(......
  • Python教程(15)——Python流程控制语句详解
    Python流程控制是Python编程中非常重要的一部分,它用于控制程序的执行流程。Python提供了多种流程控制语句,包括if语句、while循环、for循环、break和continue语句等。这种流程控制在各个语言中都是大同小异的,如果你已经学过其他的语言,那么这章节就可以直接跳过。if语句if语句用于......