Cassandra 文档

版本

您正在查看预发布版本的文档。

查看最新版本

概述

Apache Cassandra 是一个开源的分布式 NoSQL 数据库。它实现了分区宽列存储模型,具有最终一致性语义。

Cassandra 最初是在 Facebook 设计的,使用分阶段事件驱动架构 (SEDA)。此初始设计实现了 Amazon 的 Dynamo 分布式存储和复制技术以及 Google 的 Bigtable 数据和存储引擎模型的组合。Dynamo 和 Bigtable 都是为了满足对可扩展、可靠和高可用存储系统的不断增长的需求而开发的,但每个系统都有一些可以改进的地方。

Apache Cassandra 被设计为这两个系统的最佳组合,以满足不断增长的海量存储需求,无论是数据量还是查询量。随着应用程序开始需要完整的全球复制以及始终可用的低延迟读写,一种新的数据库模型成为满足这些新需求的必要条件。当时的关联数据库系统难以满足这些需求。

Apache Cassandra 的设计目标是解决这些挑战,并牢记以下设计目标:

  • 完整的全主数据库复制

  • 低延迟下的全球可用性

  • 在商品硬件上扩展

  • 每个额外处理器线性增加吞吐量

  • 在线负载均衡和集群增长

  • 分区键定向查询

  • 灵活的模式

功能

Cassandra 提供了 Cassandra 查询语言 (CQL),这是一种类似 SQL 的语言,用于创建、修改和删除数据库模式,以及访问数据。CQL 允许用户使用以下方法在 Cassandra 节点集群中组织数据:

  • 键空间:定义数据集如何按数据中心复制。复制是指每个集群保存的副本数量。键空间包含表。

  • 表:表由行和列组成。列定义了表中单个数据的类型化模式。表根据分区键中提供的列进行分区。Cassandra 表可以灵活地向表添加新列,而不会造成停机。

  • 分区:定义 Cassandra 中所有行必须具有的主键的强制部分,以标识存储该行的集群中的节点。所有高性能查询都在查询中提供分区键。

  • 行:包含由分区键和可选的附加聚簇键组成的唯一主键标识的一组列。

  • 列:属于行的单个数据,具有类型。

CQL 支持对分区数据集的许多高级功能,例如:

  • 集合类型,包括集合、映射和列表

  • 用户定义类型、元组、函数和聚合

  • 用于辅助索引的存储附加索引 (SAI)

  • 本地辅助索引 (2i)

  • 用户定义类型、函数和聚合

  • 具有原子比较和设置语义的单分区轻量级事务

  • (实验性) 物化视图

Cassandra 明确选择不实现需要跨分区协调的操作,因为这些操作通常很慢,而且很难提供高度可用的全局语义。例如,Cassandra 不支持:

  • 跨分区事务

  • 分布式联接

  • 外键或参照完整性。

操作

Apache Cassandra 配置设置在 cassandra.yaml 文件中配置,该文件可以通过手动编辑或借助配置管理工具进行编辑。某些设置可以通过在线界面进行实时操作,但其他设置需要重新启动数据库才能生效。

Cassandra 提供了用于管理集群的工具。nodetool 命令与 Cassandra 的实时控制界面交互,允许从 cassandra.yaml 中实时操作许多设置。auditlogviewer 用于查看审计日志。fqltool 用于查看、重放和比较完整查询日志。

此外,Cassandra 还支持开箱即用的原子快照功能,该功能提供 Cassandra 数据的特定时间点 (PIT) 快照,以便轻松与许多备份工具集成。Cassandra 还支持增量备份,其中数据可以在写入时进行备份。