Cassandra 详解

1. Cassandra 简介

Apache Cassandra 是一个开源的 分布式 NoSQL 数据库,设计用于处理大规模数据,具有高可用性、线性可扩展性和无单点故障的特点。它最初由 Facebook 开发,后成为 Apache 顶级项目。

核心特点

  • 分布式架构:数据自动分片(partitioning)和复制(replication)。
  • 高可用性:无单点故障,支持多数据中心部署。
  • 线性可扩展:可通过增加节点提升吞吐量和存储容量。
  • 最终一致性 & 可调一致性:支持 QUORUMONEALL 等一致性级别。
  • 灵活的数据模型:基于列族(Column Family)的宽列存储(Wide-Column Store)。
  • 高性能写入:LSM 树(Log-Structured Merge-Tree)存储引擎,适合高写入负载。

2. Cassandra 数据模型

Cassandra 的数据模型不同于传统关系型数据库,它采用 键值 + 列族(Column Family) 的方式存储数据。

核心概念

概念说明
Keyspace类似关系数据库的 “database”,定义数据复制策略和一致性级别。
Table (Column Family)存储数据的表,由 Partition KeyClustering Columns 组织。
Partition Key决定数据在集群中的分布(分区),相同 Partition Key 的数据存储在同一个节点。
Clustering Columns决定数据在分区内的排序(如时间戳)。
Primary KeyPartition Key + Clustering Columns 组成,唯一标识一行。

示例:创建 Keyspace 和 Table

-- 创建 Keyspace,设置复制策略
CREATE KEYSPACE my_keyspace 
WITH replication = {
    'class': 'SimpleStrategy',
    'replication_factor': 3
};

-- 创建表,定义主键(user_id 是 Partition Key, created_at 是 Clustering Column)
CREATE TABLE my_keyspace.users (
    user_id UUID,
    name TEXT,
    email TEXT,
    created_at TIMESTAMP,
    PRIMARY KEY (user_id, created_at)
) WITH CLUSTERING ORDER BY (created_at DESC);

3. Cassandra 架构

3.1 分布式设计

  • Peer-to-Peer 架构:无主节点,所有节点平等(避免单点故障)。
  • Gossip 协议:节点间通信,交换状态信息。
  • 一致性哈希:数据分布到不同节点,避免热点问题。

3.2 数据复制

  • Replication Factor (RF):副本数量(如 RF=3 表示数据存 3 份)。
  • Replication Strategy
    • SimpleStrategy:单数据中心复制(适合测试)。
    • NetworkTopologyStrategy:多数据中心复制(生产推荐)。

3.3 写入与读取流程

写入流程
  1. 客户端向任意节点(Coordinator)发送写入请求。
  2. Coordinator 根据 Partition Key 计算目标节点。
  3. 数据写入目标节点的 MemTable(内存)和 CommitLog(持久化日志)。
  4. MemTable 满后刷入 SSTable(磁盘存储)。
读取流程
  1. 客户端向 Coordinator 发送查询请求。
  2. Coordinator 根据一致性级别(如 QUORUM)从多个副本读取数据。
  3. 合并多个副本的数据,返回最新版本(基于时间戳)。

4. Cassandra 查询语言(CQL)

CQL(Cassandra Query Language)类似 SQL,但不支持 JOIN 和复杂事务。

常见操作

-- 插入数据
INSERT INTO my_keyspace.users (user_id, name, email, created_at)
VALUES (uuid(), 'Alice', 'alice@example.com', toTimestamp(now()));

-- 查询数据(必须指定 Partition Key)
SELECT * FROM my_keyspace.users WHERE user_id = ?;

-- 范围查询(需 Clustering Column)
SELECT * FROM my_keyspace.users 
WHERE user_id = ? AND created_at > '2023-01-01';

-- 更新数据(需指定 Primary Key)
UPDATE my_keyspace.users SET email = 'new@example.com'
WHERE user_id = ? AND created_at = ?;

-- 删除数据
DELETE FROM my_keyspace.users 
WHERE user_id = ? AND created_at = ?;

限制

  • 不支持 JOIN:需反规范化(Denormalization)或应用层处理。
  • 不支持复杂事务:仅支持单行原子操作。
  • 二级索引有限:适合低基数数据,高基数查询用 Materialized View 或自定义索引。

5. Cassandra 一致性级别

Cassandra 允许在读写时指定一致性级别(Consistency Level):

级别说明
ONE只需 1 个副本确认
QUORUM多数副本确认(RF=3 时需 2 个)
ALL所有副本确认(强一致,但高延迟)
LOCAL_QUORUM本地数据中心的多数副本确认

示例:设置一致性级别

-- 设置写入一致性
CONSISTENCY QUORUM;

-- 查询时指定一致性
SELECT * FROM users WHERE user_id = ? USING CONSISTENCY ONE;

6. Cassandra 适用场景

适合场景

高写入负载(如日志、IoT 数据)
低延迟读取(如用户画像、实时分析)
全球分布式部署(多数据中心支持)
高可用需求(无单点故障)

不适合场景

复杂事务(如银行交易)
多表 JOIN 查询
强一致性要求极高的场景(如金融核心系统)


7. Cassandra vs. 其他数据库

特性CassandraMongoDBHBaseDynamoDB
数据模型宽列存储文档存储宽列存储键值 + 文档
一致性可调一致性可调强一致可调
扩展性线性扩展分片集群依赖 HDFS自动扩展
适用场景高写入、分布式灵活查询Hadoop 生态AWS 云服务

8. 总结

  • Cassandra 是分布式、高可用的 NoSQL 数据库,适合海量数据和高写入场景。
  • 数据模型基于 Partition Key + Clustering Columns,查询需考虑分区策略。
  • 可调一致性 允许在可用性和一致性之间权衡。
  • 适用场景:IoT、日志分析、实时推荐、消息存储等。

学习资源

如果有具体使用场景或问题,可以进一步探讨! 🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思静鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值