2516 字
约 8 分钟
28
CQL 基础入门:像操作 MySQL 一样使用 Cassandra

CQL 基础入门:像操作 MySQL 一样使用 Cassandra

在学习 Cassandra 时,真正需要先掌握的并不是复杂的分布式原理,而是:

怎么创建库、创建表、插入、查询、修改、删除数据。

Cassandra 提供了一套专门的查询语言:

CQL
Cassandra Query Language

它的语法和 SQL 很像。

所以如果之前已经熟悉 MySQL,其实 CQL 上手并不困难。


一、先理解 Cassandra 中几个基本概念

可以先和 MySQL 做个对应。

MySQL                 Cassandra

数据库 Database   ≈   Keyspace
表 Table           ≈   Table
一行数据 Row       ≈   Row
主键                ≈   Primary Key
SQL                 ≈   CQL

其中最重要的是:

Keyspace

可以暂时理解成:

Cassandra 中的“数据库”。

例如:

xiaohashu

就是一个 Keyspace。

里面可以继续创建:

note_content
user_content
comment_content

等表。


二、Cassandra 的整体结构

可以简单理解成:

Cassandra Cluster
      ↓
Keyspace
      ↓
Table
      ↓
Row
      ↓
Column

如果类比 MySQL:

MySQL Server
      ↓
Database
      ↓
Table
      ↓
Row
      ↓
Column

所以对于刚入门的人来说,两者表面使用体验其实比较接近。


三、什么是 Node 和 Cluster?

Cassandra 是一个分布式数据库。

一个 Cassandra 服务器可以看成:

Node

多个 Node 组成:

Cluster

例如:

Cassandra Cluster
├── Node 1
├── Node 2
└── Node 3

数据可以分散存储到多个节点中。

而且 Cassandra 节点之间没有传统意义上的主从关系,可以简单理解成:

多个节点一起提供数据存储和查询能力。


四、什么是 Keyspace?

Keyspace 是 Cassandra 中非常重要的概念。

可以把它理解成:

MySQL Database

例如创建:

CREATE KEYSPACE IF NOT EXISTS xiaohashu
WITH replication = {
    'class': 'SimpleStrategy',
    'replication_factor': 1
};

意思就是:

创建一个名字叫 xiaohashu 的 Keyspace。


五、replication 是什么?

这里:

replication

表示:

Cassandra 中的数据应该如何复制。

例如:

replication_factor = 1

表示:

一份数据
 ↓
只保存 1 份副本

这种配置比较适合:

开发环境
测试环境
单节点学习环境

因为如果这个节点挂了:

数据可能就没了

所以生产环境通常不会简单只保留一份。


六、查看所有 Keyspace

类似 MySQL:

SHOW DATABASES;

Cassandra 可以使用:

DESCRIBE KEYSPACES;

查看当前存在的所有 Keyspace。


七、选择 Keyspace

MySQL 中:

USE xiaohashu;

Cassandra 也是:

USE xiaohashu;

执行之后:

后面的 CREATE TABLE
INSERT
SELECT
UPDATE
DELETE

都会针对当前 Keyspace。


八、删除 Keyspace

如果整个 Keyspace 都不要了:

DROP KEYSPACE IF EXISTS xiaohashu;

需要注意:

删除 Keyspace 会连里面的数据一起删除。

可以把它理解成 MySQL 的:

DROP DATABASE

九、创建表

项目中创建了一张:

note_content

用于保存笔记正文。

结构非常简单:

CREATE TABLE note_content (
    id UUID PRIMARY KEY,
    content TEXT
);

只有两个字段:

id
content

可以理解成:

id       → Key

content  → Value

所以这张表实际上被当成:

K-V 键值存储

来使用。


十、为什么 id 使用 UUID?

这里没有直接使用普通自增 ID,而是:

UUID

例如:

728c9c82-c64b-410b-8970-0dcae49efaa7

原因和 Cassandra 的分布式特性有关。

Cassandra 会根据:

Partition Key

决定数据应该存放到哪个节点。

例如:

UUID
 ↓
计算 Hash
 ↓
决定存储节点

UUID 本身随机性比较强,因此通常更容易让数据:

比较均匀地分散

到不同节点。

从而减少某个节点特别热的问题。


十一、Primary Key 在 Cassandra 中很重要

例如:

id UUID PRIMARY KEY

它不只是为了:

唯一标识一条数据

同时还参与决定:

这条数据应该分布到 Cassandra 集群的哪个位置。

所以 Cassandra 中:

Primary Key
Partition Key

比普通 MySQL 里面单纯理解“唯一 ID”更加重要。


十二、插入数据

插入一条笔记:

INSERT INTO note_content (id, content)
VALUES (uuid(), '这是一条测试笔记');

其中:

uuid()

表示:

Cassandra 自动帮我们生成一个 UUID。

最终数据大概是:

id:
728c9c82-c64b-410b-8970-0dcae49efaa7

content:
这是一条测试笔记

十三、查询数据

查询整张表:

SELECT * FROM note_content;

和 MySQL 非常像。

如果根据 id 查询:

SELECT *
FROM note_content
WHERE id = 728c9c82-c64b-410b-8970-0dcae49efaa7;

整个思路就是:

拿着 Key
 ↓
查 Value

对于当前项目来说:

笔记内容 UUID
 ↓
Cassandra
 ↓
笔记正文

十四、更新数据

修改笔记正文:

UPDATE note_content
SET content = '更新后的评论内容'
WHERE id = 728c9c82-c64b-410b-8970-0dcae49efaa7;

整体逻辑和 MySQL 一样:

根据 id 找到记录
 ↓
修改 content

十五、删除数据

删除:

DELETE FROM note_content
WHERE id = 728c9c82-c64b-410b-8970-0dcae49efaa7;

也是:

根据 Key
 ↓
删除对应数据

十六、把所有基本命令串起来

完整流程可以记成:

创建 Keyspace
      ↓
选择 Keyspace
      ↓
创建 Table
      ↓
INSERT
      ↓
SELECT
      ↓
UPDATE
      ↓
DELETE

对应命令:

CREATE KEYSPACE

USE

CREATE TABLE

INSERT

SELECT

UPDATE

DELETE

和 MySQL 的学习路径几乎一样。


十七、这套项目为什么使用 Cassandra?

当前项目想把 Cassandra 当成:

K-V 键值存储

例如一篇笔记:

Key
=
UUID

对应:

Value
=
笔记正文

也就是:

UUID
 ↓
Cassandra
 ↓
content

例如:

728c9c82...
      ↓
“今天学习了 Spring Cloud 微服务……”

因此创建的表也非常简单:

note_content
├── id
└── content

核心目的就是:

根据一个唯一 Key 快速找到对应的笔记内容。


十八、为什么不直接把所有内容放 MySQL?

这里需要结合当前项目的设计思路理解。

例如笔记可能存在两类数据。

一类是:

标题
用户 ID
点赞数
评论数
发布时间
状态

这种结构化数据,很适合:

MySQL

另一类是:

很长的笔记正文

项目选择把它单独交给:

Cassandra

于是可能形成:

MySQL
负责笔记基本信息

Cassandra
负责笔记正文

可以理解成:

note 表

id
user_id
title
content_uuid
like_count
...

其中:

content_uuid

再去 Cassandra 找:

content_uuid
    ↓
note_content
    ↓
content

这就是后面 KV 微服务和笔记内容服务的基础。


十九、和 Redis 有什么区别?

刚开始看到:

Key → Value

很容易想到 Redis。

两者虽然都可以处理 Key-Value 场景,但关注点并不完全一样。

当前项目这里主要想表达的是:

Redis
更常用于缓存、临时状态等

而:

Cassandra
用于持久化保存大量数据

在这套项目中:

Token
权限
缓存

更多可以看到 Redis。

而:

笔记正文

则选择 Cassandra 做持久化存储。


二十、CQL 和 SQL 的关系

刚开始完全可以这样理解:

SQL
 ↓
操作 MySQL
CQL
 ↓
操作 Cassandra

而且很多基础语法非常像:

CREATE
INSERT
SELECT
UPDATE
DELETE

所以你会感觉:

CQL 上手并不难。

不过需要注意:

Cassandra 虽然看起来有表、有行、有 CQL,但它不是关系型数据库。

它底层的数据组织、分区、复制、查询方式和 MySQL 有明显区别。

所以前期可以:

先用 SQL 的经验帮助入门

但后面不能完全按照 MySQL 的思维设计 Cassandra。


二十一、入门阶段最需要记住的东西

目前不需要一下研究 Cassandra 所有高级特性。

先记住下面这些就足够继续项目:

Keyspace
≈ 数据库

Table
≈ 表

CQL
≈ Cassandra 的 SQL

UUID
= 当前项目中的 Key

content
= 当前项目中的 Value

Primary Key / Partition Key
会影响数据如何分布

replication
决定数据副本

然后掌握:

CREATE KEYSPACE
USE
CREATE TABLE
INSERT
SELECT
UPDATE
DELETE

基本就能继续后面的 Spring Boot 整合 Cassandra。


二十二、整个业务思路

最终可以把当前 Cassandra 设计理解成:

用户发布笔记
      ↓
产生笔记正文
      ↓
生成 UUID
      ↓
UUID 作为 Key
      ↓
正文作为 Value
      ↓
存入 Cassandra

以后查询:

拿到 UUID
   ↓
查询 Cassandra
   ↓
得到笔记正文

删除:

拿到 UUID
   ↓
删除 Cassandra 中对应正文

所以这一阶段真正需要理解的,不只是几条 CQL 命令。

而是:

项目准备使用 Cassandra 保存笔记正文,并通过 UUID 把一段正文当成一个 Key-Value 数据进行管理。


总结

CQL 是 Cassandra 的查询语言,基础语法和 SQL 非常类似。

可以先这样记:

Keyspace = 数据库

Table = 表

CQL = Cassandra 的 SQL

UUID = Key

content = Value

基本操作:

CREATE
INSERT
SELECT
UPDATE
DELETE

而在当前项目中,Cassandra 的核心用途可以概括为:

笔记正文
   ↓
生成 UUID
   ↓
UUID : Content
   ↓
存入 Cassandra

所以后面继续学习 Spring Boot 整合 Cassandra 时,本质上就是把现在手写的:

INSERT
SELECT
DELETE

改成由 Java 代码帮我们完成。

CQL 这一节真正需要掌握的核心不是背命令,而是理解 Cassandra 中“Keyspace → Table → Key → Value”的数据组织方式,以及项目为什么准备用它保存笔记正文。

CQL 基础入门:像操作 MySQL 一样使用 Cassandra
https://clxhxhhr.top/posts/2945/
作者
clxstart
发布于
2026-09-20
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。