跳转到主要内容
Chinese, Simplified

Cassandra 是一个简单的分布式 NoSQL 数据库。 分布式意味着 Cassandra 有多个相互连接的节点,负责存储和检索数据。 需要多个节点来实现 Cassandra 著名的可用性、可扩展性和高性能。
说到分布式系统,我们需要了解 CAP(Consistency, Availability & Partition Tolerance)定理。 根据它,“任何分布式数据存储只能提供这三个(即 CAP)保证中的两个”。 由于分布式系统中必然会发生网络故障,因此我们需要注意“分区容限”,以确保在由复制因子配置的节点之间保持数据的多个副本。 所以有两种选择,要么优先考虑可用性,要么在发生网络故障时优先考虑一致性。

一般来说,Cassandra 被称为 AP(可用性和分区容限)数据库,因为那是 Cassandra 最适合的数据库。 然而,更高的一致性是可调的,牺牲了 Cassandra 中的可用性和性能,用于一些需要但 Cassandra 不适合的用例。


Cassandra 中使用的基本术语

  • 节点:运行 Cassandra 软件并存储数据子集的服务器。
  • 集群:作为一个 Cassandra 数据库的许多节点的集合。
  • Column :Cassandra 中用于存储数据字段的键和值的最小存储单元,也称为 Cell。
  • 列族:特定用例的列集合。与表相同。
  • 分区:它是表的特定节点上的数据子集。一个节点可以有多个分区。
  • 分区键:一组列,用于标识数据在节点的特定分区中的位置。
  • 聚类键:用于按排序顺序存储多条记录的列集。
  • 行键:唯一标识数据库中记录的主键。主键 = 分区键 + 集群键
  • Keyspace :用于组成多个列族的存储单元,类似于关系数据库中的模式

可能没有任何集群键列具有与分区键相同的行/主键。虽然分区键的主要目的不是作为主键,而是将数据分布在不同小分区的不同节点上。但是,分区键绝对不应该具有低基数,您是否应该具有非常高的基数取决于您查询数据的用例和数据大小。
当我们有聚类键(这里是时间戳字段)时,下图会更清楚:

Cassandra 擅长什么

 

  • 高可用性:Cassandra 没有单点故障,即在大多数节点仍然可用和连接的情况下始终可用于读取和写入。这是可以实现的,因为 C* 中没有主从拓扑,所有节点都是相同的(当然,这些节点上的数据可能因集群中少数节点上的复制而不同)。所以即使你没有很强的一致性、可扩展性和性能要求,只是想拥有跨不同区域的高可用数据库,Cassandra 也是一个不错的选择。这就是为什么 Kong(API Gateway) 也将其用作数据库选择之一。
  • 写入负载的水平可扩展性和高性能:这是可以实现的,因为我们可以有多个节点来处理不同分区的写入负载,并且在单个节点内,Cassandra 以仅追加方式将新数据写入名为 commitlog 的文件,该文件会写入磁盘更快(与 Kafka 相同)。除此之外,Cassandra 使用 memtables 将新数据存储在内存中,然后定期将数据从内存刷新到称为 SSTable 的数据文件中。因此,提交日志仅用于节点故障场景。
  • 数据大小水平可扩展:这是可以实现的,因为我们可以在集群中添加更多节点来处理更多数据。
  • 读取负载水平可扩展(有条件):基于单个分区键从 Cassandra 查询数据是快速且可扩展的,但有一些因素可能会影响性能和可扩展性。例如,如果单个分区中有太多数据,或者正在为同一分区键更新数据,导致数据驻留在同一分区的不同数据文件(SSTables)中。尽管有不同的 SSTable 压缩策略来最大限度地减少影响,但需要根据确切的用例以及使用 Cassandra 数据库时最重要的部分数据建模仔细测试事情。

 

Cassandra不擅长或根本不支持的地方

 

  • ACID(原子性,一致性,隔离性,持久性)合规性:不支持金融系统等应用程序所需的。
  • 聚合函数:Cassandra 不适合计数、最大值、平均值等聚合。
  • 联接:不支持,尽管数据非规范化是 Cassandra 中的一种常见做法,用于将查询的相关数据保存在一个分区中,但这应该在限制范围内。
  • 排序:Cassandra 仅支持对聚类列进行排序,并且一旦插入,您就无法更改聚类列的值。所以在 Cassandra 中排序是一个设计决策。
  • 新用例:我们需要根据查询模式将数据存储在 Cassandra 中,因此如果出现任何新需求,除非我们按照 Cassandra 数据建模要求再次存储数据,否则很难处理它。

概括


在这篇文章中,我们了解了 Cassandra 的基础知识,它的用例以及我们需要小心或避免使用 Cassandra 的地方。
我们将在即将发布的帖子中介绍更高级的场景和用例,在此之前,请务必为这篇文章鼓掌,并关注我以在未来查看更多此类帖子。

原文:https://itsmanish.medium.com/cassandra-101-introduction-eb7556a85bc

本文:https://jiagoushi.pro/cassandra-101-introduction

Tags
 
Article
知识星球
 
微信公众号
 
视频号