Cassandra

Cassandra 简介 - Apache Cassandra中文手册 (dba.cn)

简介

Apache Cassandra是一个高度可扩展的高性能分别是数据库,用于处理大量商用服务器上的大量数据,提高可用性,无单点故障。是一种Nosql类型数据库。

关系数据库NoSQL数据库
支持强大的查询语言。支持非常简单的查询语言。
它具有固定的模式。无固定模式。
遵循ACID(原子性,一致性,隔离性和持久性)。只有“最终一致”。
支持事务。不支持事务。

特性

  • 弹性可扩展:Cassandra是高度可扩展的;它允许添加更多的硬件以适应更多的客户端和更多的数据根据需求。
  • 始终基于架构:Cassandra没有单点故障,它可以连续用于不能承担故障的关键业务应用程序
  • 快速线性性能:Cassandra是线性可扩展的,即它为你增加急群中节点数量增加你的吞吐量。因此保持一个快速响应时间
  • 灵活的数据存储:Cassandra适应所有可能的数据格式,包括:结构化,半结构化和非结构化,它可以根据您的需求动态适应变化的数据结构。
  • 敏捷的数据分发:Cassandra通过在多个数据中心中复制数据,可以灵活地在需要时分发数据
  • 事务支持:Cassandra支持属性,如原子性,一致性,隔离和持久性(ACID)。
  • 快速写入:Cassandra被设计为在廉价的商品硬件上运行。 它执行快速写入,并可以存储数百TB的数据,而不牺牲读取效率。

架构

Cassandra的设计目的是处理跨多个节点的大数据工作负载,而没有任何单点故障。Cassandra在其节点之间具有对等分布式系统,并且数据分布在集群的所有节点之间。

集群中的所有节点都扮演相同的角色,每个节点是独立的,并且同时互联都按其他节点。

急群中每个节点都可以接受读取和写入请求,无论数据实际位于急群中的何处。

当节点关闭时,可以从网络中的其他节点提供读写请求。

数据复制

在Cassandra中,集群中的一个或多个节点充当给定数据片段的副本。如果检测到一些节点过期相应,Cassandra将向客户端返回最近的值。返回最新的值后,Cassandra在后台执行读修复以更新失效值。

组件

  • 节点:它是存储数据的地方
  • 数据中心:它是相关节点的集合
  • 集群:集群是包含一个或多个数据中心的组件
  • 提交日志:是cassandra中崩溃恢复机制。每个操作都写入提交日志。
  • Mem表:mem表是存储器驻留的数据结构,提交日志后,数据将被写入mem表。有时,相对单列族,将有多个mem表。
  • SSTable:它是一个磁盘文件,当其内容达到阈值时,数据从mem表中刷新
  • 布隆过滤器:这些只是快速,非确定性的算法英语测试元素是否是集合的成员。它是一种特殊的缓存。每次查询后访问Bloom过滤器

查询语言

用户可以使用Cassandra查询语言(CQL)通过其节点访问Cassandra.CQL将数据库(keyspace)视为容器。程序员使用cqlsh:提示以使用CQL或单独的应用程序语言驱动程序。

客户端针对其读写操作访问其任何节点。该节点(协调器)在客户端和保存数据的节点之间播放代理。

写操作

节点的每个写入活动都由接写在节点中的提交日志捕获。稍后数据江北捕获并存储在存储表中。每当内存满时,数据将写入SStable数据文件。所有写入都会在整个集群中自动分区和复制。Cassandra会定期整合SSTable,丢弃不必要的数据。

读操作

LSM-Tree的树节点可以分为两种,保存在内存中的称之为MemTable, 保存在磁盘上的称之为SSTable

在 读操作,Cassandra从MEM-表得到的值,并检查过滤器栈放到保存所需数据的相应的SSTable。

数据模型

集群Cluster

Cassandra数据库分布在几个一起操作的机器上。最外层容器被称为集群。对于故障处理,每个节点包含一个副本,副本将负责。Cassandra按照环形格式将节点排列在集群中,并为它们分配数据。

键空间(Keyspace)

键空间是Cassandra中最外层的容器。Cassandra中的一个键空间的基本属性是

  • 复制因子:它是急群中将接受相同数据副本的计算机数。
  • 副本放置策略 - 它只是把副本放在戒指中的策略。我们有简单策略(机架感知策略),旧网络拓扑策略(机架感知策略)和网络拓扑策略(数据中心共享策略)等策略。
  • 列族:键空间是一个或多个列族的容器,列族优势一个行集合的容器。每行包含有序列。列族表示数据的结构。每个空间至少有一个,通常是许多列族。

创建键空间的语法如下 -

CREATE KEYSPACE Keyspace name
WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3};

下图显示了键空间的示意图。

列族

列族是有序收集行的容器。有是一行优势一个有序的列集合。下表列出了区分列系列和关系数据库的要点。

关系表Cassandra列族
关系模型中的模式是固定的。 一旦为表定义了某些列,在插入数据时,在每一行中,所有列必须至少填充一个空值。在Cassandra中,虽然定义了列族,但列不是。 您可以随时向任何列族自由添加任何列。
关系表只定义列,用户用值填充表。在Cassandra中,表包含列,或者可以定义为超级列族。

Cassandra列族具有以下属性 -

  • keys_cached - 它表示每个SSTable保持缓存的位置数。
  • rows_cached - 它表示其整个内容将在内存中缓存的行数。
  • preload_row_cache -它指定是否要预先填充行缓存。

注 - 与不是固定列族的模式的关系表不同,Cassandra不强制单个行拥有所有列。

下图显示了Cassandra列族的示例。

列是Cassandra的基本数据结构,具有三个值,即键或列名称,值和时间戳。下面给出了列的结构。

  • name:byte[]
  • value:byte[]
  • clock:clock[]

超级列

超级列是一个特殊的列,因此,它也是一个键值对。但是超级列存储了子列的地图。

通常列族被存储在磁盘上的单个文件中。因此,为了优化性能,重要的是保持您看在同一列中一起查询的列,并且超级列在此可以有所帮助。下面是超激列的结构

  • name:byte[]
  • cols:map<byte[],column>

Cassandra 和 RDBMS 的数据模型

下表列出了区分Cassandra的数据模型和RDBMS的数据模型的要点。

关系型数据库Cassandra
RDBMS处理结构化数据。Cassandra处理非结构化数据。
它具有固定的模式。Cassandra具有灵活的架构。
在关系型数据库中,表是一个数组的数组。 (ROW x COLUMN)在Cassandra中,表是“嵌套的键值对”的列表。 (ROW x COLUMN键x COLUMN值)
数据库是包含与应用程序对应的数据的最外层容器。Keyspace是包含与应用程序对应的数据的最外层容器。
表是数据库的实体。表或列族是键空间的实体。
Row是关系型数据库中的单个记录。Row是Cassandra中的一个复制单元。
列表示关系的属性。Column是Cassandra中的存储单元。
关系型数据库支持外键的概念,连接。关系是使用集合表示。
Last modification:January 15, 2024
如果觉得我的文章对你有用,请随意赞赏