Cassandra简介 #
一、什么是Apache Cassandra #
Apache Cassandra是一个开源的、分布式的、去中心化的NoSQL数据库管理系统。它最初由Facebook开发,用于处理海量数据,后来成为Apache顶级项目。Cassandra设计用于管理分布在多台服务器上的大量结构化数据,提供高可用性、无单点故障的特性。
1.1 发展历史 #
| 时间 | 事件 |
|---|---|
| 2008年 | Facebook开源Cassandra |
| 2009年 | 成为Apache孵化器项目 |
| 2010年 | 成为Apache顶级项目 |
| 2012年 | 发布Cassandra 1.2,引入CQL 3.0 |
| 2015年 | 发布Cassandra 3.0,重大架构改进 |
| 2021年 | 发布Cassandra 4.0,性能大幅提升 |
1.2 核心组件 #
text
┌─────────────────────────────────────────────────────────┐
│ Cassandra 节点 │
├─────────────┬─────────────┬─────────────┬───────────────┤
│ Client │ Storage │ Compaction│ Gossip │
│ Requests │ Engine │ Manager │ Protocol │
├─────────────┼─────────────┼─────────────┼───────────────┤
│ MemTable │ SSTable │ CommitLog │ BloomFilter │
│ (内存) │ (磁盘) │ (日志) │ (过滤器) │
└─────────────┴─────────────┴─────────────┴───────────────┘
二、核心特点 #
2.1 分布式架构 #
text
┌─────────────────────────────────────────────────────────┐
│ Cassandra 集群 │
├─────────────────────────────────────────────────────────┤
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Node 1 │ │ Node 2 │ │ Node 3 │ │ Node 4 │ │
│ │ (对等) │ │ (对等) │ │ (对等) │ │ (对等) │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
│ │
│ 无主架构 │ 对等节点 │ 自动分片 │ 数据复制 │
└─────────────────────────────────────────────────────────┘
2.2 高可用性 #
| 特性 | 说明 |
|---|---|
| 无单点故障 | 所有节点对等,任一节点故障不影响整体 |
| 自动复制 | 数据自动复制到多个节点 |
| 自动故障检测 | 通过Gossip协议检测节点状态 |
| 自动恢复 | 故障节点恢复后自动同步数据 |
2.3 线性可扩展 #
sql
-- 添加节点即可线性扩展容量和吞吐量
-- 无需修改应用代码
节点数量: 1 → 2 → 4 → 8 → 16
吞吐量: 1x → 2x → 4x → 8x → 16x
数据容量: 1x → 2x → 4x → 8x → 16x
2.4 灵活的数据模型 #
sql
-- 宽表模型,支持灵活的列定义
CREATE TABLE users (
user_id UUID PRIMARY KEY,
name TEXT,
email TEXT,
preferences MAP<TEXT, TEXT>,
tags SET<TEXT>,
history LIST<TEXT>
);
三、数据模型 #
3.1 层级结构 #
text
Cluster(集群)
└── Keyspace(键空间)- 类似数据库
└── Table(表)- 类似表
└── Partition(分区)- 数据分片
└── Row(行)- 数据记录
└── Column(列)- 数据字段
3.2 数据分布 #
text
┌─────────────────────────────────────────────────────────┐
│ Token Ring(令牌环) │
├─────────────────────────────────────────────────────────┤
│ │
│ Node A Node B Node C │
│ (0-100) (100-200) (200-0) │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌───────────┐ ┌───────────┐ ┌───────────┐ │
│ │ Partition │ │ Partition │ │ Partition │ │
│ │ 数据1 │ │ 数据2 │ │ 数据3 │ │
│ └───────────┘ └───────────┘ └───────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
四、应用场景 #
4.1 适用场景 #
| 场景 | 说明 |
|---|---|
| 物联网(IoT) | 海量设备数据、时序数据存储 |
| 用户画像 | 存储用户属性、行为数据 |
| 消息系统 | 消息存储、聊天记录 |
| 推荐系统 | 用户行为日志、推荐数据 |
| 金融交易 | 交易记录、账户信息 |
| 日志分析 | 大量日志数据存储与分析 |
4.2 行业案例 #
text
互联网公司
├── Netflix - 观看历史、推荐系统
├── Instagram - 用户动态、照片元数据
├── Twitter - 推文存储、时间线
└── Apple - 用户数据、设备信息
金融行业
├── 银行交易记录
├── 风控数据存储
└── 账户管理系统
物联网
├── 设备传感器数据
├── 实时监控数据
└── 历史数据存储
4.3 不适用场景 #
| 场景 | 原因 |
|---|---|
| 复杂关联查询 | 不支持JOIN,需要反范式化设计 |
| ACID强一致性事务 | 最终一致性模型 |
| 小数据量 | 大材小用,增加运维复杂度 |
| 频繁更新同一行 | 写入性能会受影响 |
五、与其他数据库对比 #
5.1 vs MySQL #
| 特性 | Cassandra | MySQL |
|---|---|---|
| 架构 | 分布式、无主 | 主从复制 |
| 扩展方式 | 水平扩展 | 垂直扩展为主 |
| 数据模型 | 宽列存储 | 关系模型 |
| 查询语言 | CQL | SQL |
| JOIN | 不支持 | 支持 |
| 事务 | 轻量级事务 | 完整ACID |
5.2 vs MongoDB #
| 特性 | Cassandra | MongoDB |
|---|---|---|
| 架构 | 无主架构 | 主从架构 |
| 一致性 | 可调一致性 | 强一致性(默认) |
| 查询 | CQL(SQL-like) | MongoDB查询语法 |
| 索引 | 二级索引有限 | 丰富的索引支持 |
| 分片 | 自动分片 | 需配置分片键 |
5.3 vs HBase #
| 特性 | Cassandra | HBase |
|---|---|---|
| 架构 | 无主架构 | Master-Slave |
| 依赖 | 无外部依赖 | 依赖Hadoop |
| 写入性能 | 极高 | 高 |
| 运维复杂度 | 较低 | 较高 |
| 生态 | 独立生态 | Hadoop生态 |
六、CQL简介 #
6.1 CQL特点 #
CQL(Cassandra Query Language)是Cassandra的查询语言,语法类似SQL:
sql
-- 创建键空间
CREATE KEYSPACE my_app
WITH replication = {
'class': 'SimpleStrategy',
'replication_factor': 3
};
-- 创建表
CREATE TABLE users (
user_id UUID PRIMARY KEY,
name TEXT,
email TEXT,
created_at TIMESTAMP
);
-- 插入数据
INSERT INTO users (user_id, name, email, created_at)
VALUES (uuid(), '张三', 'zhangsan@example.com', toTimestamp(now()));
-- 查询数据
SELECT * FROM users WHERE user_id = ?;
6.2 CQL与SQL的区别 #
| 特性 | CQL | SQL |
|---|---|---|
| JOIN | 不支持 | 支持 |
| GROUP BY | 有限支持 | 完整支持 |
| 子查询 | 不支持 | 支持 |
| 主键 | 必须指定 | 可选 |
| 排序 | 仅支持聚簇列 | 任意列 |
七、版本选择 #
7.1 版本对比 #
| 版本 | 特点 | 适用场景 |
|---|---|---|
| 3.x | 稳定版本 | 生产环境 |
| 4.x | 最新稳定版 | 新项目、性能要求高 |
| 5.x | 开发中 | 测试体验 |
7.2 版本特性 #
text
Cassandra 4.x 新特性
├── 更快的启动速度
├── 改进的性能
├── 增强的安全特性
├── 更好的工具支持
└── 改进的日志系统
八、学习路线 #
text
入门阶段
├── 理解分布式数据库概念
├── 安装Cassandra
├── 学习CQL基础语法
└── 掌握基本CRUD操作
进阶阶段
├── 理解数据分布原理
├── 主键设计
├── 索引使用
└── 一致性级别调优
高级阶段
├── 集群规划与部署
├── 性能调优
├── 运维管理
└── 故障排查
九、总结 #
Cassandra核心优势:
- 高可用性:无单点故障,自动故障转移
- 可扩展性:线性扩展,无缝添加节点
- 高性能:写入性能极高,读取性能优秀
- 灵活模型:宽列存储,灵活的数据结构
- 地理分布:支持多数据中心部署
下一步,让我们学习Cassandra的安装与配置!
最后更新:2026-03-27