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核心优势:

  1. 高可用性:无单点故障,自动故障转移
  2. 可扩展性:线性扩展,无缝添加节点
  3. 高性能:写入性能极高,读取性能优秀
  4. 灵活模型:宽列存储,灵活的数据结构
  5. 地理分布:支持多数据中心部署

下一步,让我们学习Cassandra的安装与配置!

最后更新:2026-03-27