Module 03 · Introducing Apache Cassandra: An Open-Source NoSQL Database
Introduction to Cassandra Query Language Shell (cqlsh)Cassandra 查询语言(CQL)与 cqlsh 简介
欢迎观看关于 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 查询:
- 通过编程方式 使用 Cassandra 客户端驱动程序(如 Java、Python、Scala 等)进行查询。
- 使用 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 级冷存。 |
如何快速选?
- 只想“把 Cassandra 搬过来但性能更高” → ScyllaDB(on-prem)或 云托管 Cassandra API(Keyspaces/Cosmos/Bigtable)。
- 公司已有 Hadoop/Spark 生态 → HBase 或 Bigtable。
- 需要全球多活、Serverless、按请求付费 → DynamoDB 或 Cosmos DB。
- 需要复杂二级索引、聚合、事务 → MongoDB、CockroachDB、YugabyteDB。
- 纯实时分析/时序 → ClickHouse、Druid、InfluxDB IOx。