Coursera 笔记

Module 03 · Introducing Apache Cassandra: An Open-Source NoSQL Database

Introduction to Cassandra Query Language Shell (cqlsh)Cassandra 查询语言(CQL)与 cqlsh 简介

Coursera ↗

欢迎观看关于 Cassandra Query Language (CQL) 的介绍视频。在本视频中,您将能够:

  • 描述 CQL 语言,
  • 解释运行 CQL 查询的不同选项,
  • 描述 CQL Shell,
  • 使用一些 CQL Shell 的命令行选项,
  • 了解 CQL Shell 中的特殊命令。

 Cassandra 查询语言 (CQL)

CQL 是与 Apache Cassandra 集群进行交互的主要语言,具有类似 SQL 的简单语法。CQL 支持创建键空间、表,执行插入、更新、删除和查询操作。尽管 CQL 语法与 SQL 相似,但在一些功能上有显著的不同:

  • CQL 不支持 JOIN 操作。如果需要联接数据,通常需要将数据预先存储为已经联接的形式。
  • 插入、更新和删除操作在 Cassandra 中直接在内存中进行,而不需要预先读取数据来定位目标。

CQL 关键字和标识符大小写不敏感,除非使用双引号括起来。例如,SELECT 和 select 被视为相同。


 运行 CQL 查询

有两种主要方式可以运行 CQL 查询:

  1. 通过编程方式 使用 Cassandra 客户端驱动程序(如 Java、Python、Scala 等)进行查询。
  2. 使用 CQL Shell(cqlsh),这是一个 Python 基础的命令行工具,允许您与 Cassandra 集群进行交互。cqlsh默认连接到当前节点,您也可以在命令行中指定要连接的节点。

CQL Shell 常用选项:

  • help:显示 CQLSH 命令的帮助信息。
  • version:检查当前使用的 CQLSH 版本。
  • user 和 password:用于身份验证。
  • keyspace:指定要连接的键空间。
  • file:允许从指定文件执行命令。
  • request timeout:设置查询的超时时间(默认 10 秒)。

 CQL Shell 输出示例

在 CQL Shell 中,您可以执行一系列操作,比如选择数据、插入新记录等。例如:

USE intro_cassandra;
SELECT * FROM users WHERE groupid = 12;
INSERT INTO groups (groupid, username) VALUES (12, 'new_user');
SELECT * FROM users WHERE groupid = 12;

输出将显示 groupid = 12 的所有用户,包括新插入的用户数据。


 CQL Shell 特殊命令

CQL Shell 提供了一些特殊的命令来帮助管理 Cassandra:

  • CAPTURE:将命令的输出捕获并保存到文件中。
  • CONSISTENCY:查看当前的一致性级别,并设置新的级别。
  • COPY:将数据导入或导出 Cassandra。
  • DESCRIBE:描述当前 Cassandra 集群及其对象。
  • EXIT:退出 CQLSH 会话。
  • PAGING:启用或禁用查询结果的分页显示。
  • TRACING:启用或禁用请求追踪。

 CONSISTENCY 和 COPY 命令

CONSISTENCY 命令

Cassandra 提供 可调一致性,允许您在操作级别调整一致性要求。通过 CONSISTENCY 命令,您可以控制写入或读取操作所需的最小响应节点数。常见的一致性选项包括:

  • ONE:只需一个节点响应。
  • QUORUM:多数节点(通常是副本数的多数)响应。
  • ALL:所有副本节点都必须响应。
  • LOCAL_QUORUM:本地数据中心的大多数节点响应。

例如,设置 CONSISTENCY QUORUM 时,至少需要 3 个节点响应才能成功执行操作。

COPY 命令

COPY 命令用于将数据导入到 Cassandra 或从 Cassandra 导出数据。它通常用于测试数据模型或导入小型数据集。常见的操作包括:

  • COPY TO:将数据从 Cassandra 导出到 CSV 文件。
  • COPY FROM:从 CSV 文件导入数据到 Cassandra 表。

 总结

通过本视频,您学习了:

  • CQL 是与 Cassandra 集群通信的主要语言,支持类似 SQL 的操作,但不支持 JOIN。
  • CQL Shell (cqlsh) 是与 Cassandra 交互的命令行工具,提供多种命令和选项来执行查询。
  • CQL Shell 中有一些特殊命令,如 CONSISTENCY 和 COPY,用于控制一致性级别和数据的导入导出。

下面把“同类产品”分成两大阵营来聊:

A. 同样主打“宽列式/Wide-column”模型的 NoSQL 存储
B. 在“海量数据+高可用+水平扩展”场景下,常被拿来跟 Cassandra 对标的其它分布式存储(文档、KV、云原生等)


A. 宽列式(Wide-column)家族

产品 血统/协议 与 Cassandra 主要差异 典型用户
ScyllaDB CQL 完全兼容,C++ 重写 同样 CQL,但宣称 10× 吞吐、P99 延迟更低;可替换 Cassandra 而不用改代码。 Discord、Disney+、Crypto.com
Apache HBase Java, 基于 HDFS/ZooKeeper Hadoop 生态原生;强一致单行读写;没有 CQL,用 Java API/Shell;RegionServer 架构。 Facebook 消息、小米、京东
Google Cloud Bigtable 托管服务,兼容 HBase API 全托管、无运维;按 QPS/容量独立计费;需要 GCP。 Spotify、Apple、Google 内部
Azure Cosmos DB – Cassandra API 托管,支持 CQL 协议 全托管+全球 5 级一致性可选;SLA 99.999%;但价格偏贵,有 Vendor Lock-in。 微软生态客户
AWS Keyspaces 托管,支持 CQL Serverless,自动扩容;但功能裁剪(无二级索引、无 CDC、无轻量事务)。 亚马逊云客户

一句话:想要“Cassandra 体验但更高性能/免运维”,优先看 ScyllaDB 或 云厂商托管 Cassandra API(Bigtable、Cosmos、Keyspaces)。


B. 其它常被对比的分布式存储

产品 数据模型 与 Cassandra 的取舍点
Amazon DynamoDB KV + 文档 全托管、自动扩容、按请求计费;但单 item 400 KB、二级索引收费、锁定 AWS。
MongoDB Atlas 文档 灵活 Schema、聚合框架强;副本集事务成熟;横向扩展需 Shard Key,写入吞吐低于 Cassandra。
CockroachDB / YugabyteDB 分布式 SQL 兼容 PostgreSQL 协议,支持 ACID;牺牲部分写吞吐换取事务与全局一致性。
ClickHouse / Apache Druid 列式 OLAP 写多读多场景可替代 Cassandra + Spark,但实时单行更新弱。
Redis / Aerospike 内存 KV 延迟更低,数据量受内存或闪存限制;适合热数据缓存而非 PB 级冷存。

如何快速选?

  1. 只想“把 Cassandra 搬过来但性能更高” → ScyllaDB(on-prem)或 云托管 Cassandra API(Keyspaces/Cosmos/Bigtable)。
  2. 公司已有 Hadoop/Spark 生态 → HBase 或 Bigtable。
  3. 需要全球多活、Serverless、按请求付费 → DynamoDB 或 Cosmos DB。
  4. 需要复杂二级索引、聚合、事务 → MongoDB、CockroachDB、YugabyteDB。
  5. 纯实时分析/时序 → ClickHouse、Druid、InfluxDB IOx。