Apache Cassandra 数据库详解与 Docker 部署指南
一、Cassandra 数据库概述
Apache Cassandra 是一款分布式、高可用的 NoSQL 数据库,专为处理海量数据设计,具备以下核心特性:
1. 核心特点
- 分布式架构:无中心节点设计,支持跨数据中心的自动复制和故障转移,提供线性扩展能力。
- 高可用性:通过多副本机制实现数据冗余,支持跨数据中心部署,确保 99.9% 以上的服务可用性。
- 灵活数据模型:基于宽列存储的半结构化数据模型,支持动态 schema,适合物联网、日志记录等高写入场景。
- 高性能写入:采用 LSM-Tree 存储引擎,优化写入性能,单集群可支持千万级 QPS。
- 5.0 新特性:引入向量搜索(Vector Search)支持 AI 应用,统一压缩策略提升节点数据密度至 10TB,新增 trie 数据结构优化读写效率。
2. 应用场景
- 时间序列数据:如物联网设备数据、金融交易记录。
- 实时分析:支持低延迟读写,适用于实时推荐系统。
- 大规模分布式存储:电商产品目录、社交平台用户行为数据。
- AI 与机器学习:5.0 版本的向量搜索功能可存储和检索嵌入向量,支持图像识别、聊天机器人等场景。
二、Cassandra 基础用法
1. 核心概念
- Keyspace:逻辑命名空间,类似关系型数据库的数据库。
- Table:存储数据的容器,由分区键(Partition Key)和集群键(Clustering Key)定义分布规则。
- 分区键:决定数据分布到哪个节点,确保负载均衡。
- 一致性级别:控制读写操作的副本响应数(如
ONE
、QUORUM
、ALL
)。
2. CQL 基本操作
(1)连接数据库
docker exec -it cassandra cqlsh
(2)创建 Keyspace
CREATE KEYSPACE my_keyspace
WITH REPLICATION = {
'class' : 'SimpleStrategy',
'replication_factor' : 1
};
(3)创建表
USE my_keyspace;
CREATE TABLE users (
user_id UUID PRIMARY KEY,
username TEXT,
email TEXT,
created_at TIMESTAMP
);
(4)插入数据
INSERT INTO users (user_id, username, email, created_at)
VALUES (
uuid(),
'john_doe',
'john@example.com',
toTimestamp(now())
);
(5)查询数据
SELECT * FROM users WHERE user_id = 12345678-90ab-cdef-1234-567890abcdef;
(6)更新与删除
UPDATE users SET email = 'new@example.com' WHERE user_id = 12345678-90ab-cdef-1234-567890abcdef;
DELETE FROM users WHERE user_id = 12345678-90ab-cdef-1234-567890abcdef;
3. 数据建模最佳实践
- 分区键设计:选择高基数(High Cardinality)字段,避免热点问题。
- 集群键排序:通过集群键实现数据排序,支持范围查询。
- 二级索引:谨慎使用,优先通过分区键优化查询性能。
三、Docker 安装与配置
1. 单机部署
(1)拉取镜像
docker pull cassandra:5.0.0 # 使用最新 5.0 版本
(2)启动容器
docker run -d \
--name cassandra \
-p 9042:9042 \
-v cassandra_data:/var/lib/cassandra \
cassandra:5.0.0
(3)验证运行状态
docker ps -a | grep cassandra
(4)进入容器执行 CQL
docker exec -it cassandra cqlsh
2. 数据持久化
通过挂载卷保存数据,避免容器删除后丢失:
docker run -d \
--name cassandra \
-p 9042:9042 \
-v /path/to/local/data:/var/lib/cassandra \
cassandra:5.0.0
3. 多节点集群部署(Docker Compose)
(1)创建 docker-compose.yml
version: '3'
services:
cassandra1:
image: cassandra:5.0.0
container_name: cassandra1
ports:
- "9042:9042"
environment:
- CASSANDRA_SEEDS=cassandra1,cassandra2,cassandra3
volumes:
- cassandra_data1:/var/lib/cassandra
cassandra2:
image: cassandra:5.0.0
container_name: cassandra2
environment:
- CASSANDRA_SEEDS=cassandra1,cassandra2,cassandra3
volumes:
- cassandra_data2:/var/lib/cassandra
cassandra3:
image: cassandra:5.0.0
container_name: cassandra3
environment:
- CASSANDRA_SEEDS=cassandra1,cassandra2,cassandra3
volumes:
- cassandra_data3:/var/lib/cassandra
volumes:
cassandra_data1:
cassandra_data2:
cassandra_data3:
(2)启动集群
docker-compose up -d
(3)检查集群状态
docker exec -it cassandra1 nodetool status
4. 安全配置(可选)
(1)启用认证
docker run -d \
--name cassandra \
-p 9042:9042 \
-v cassandra_data:/var/lib/cassandra \
-e CASSANDRA_AUTHENTICATION=org.apache.cassandra.auth.PasswordAuthenticator \
-e CASSANDRA_AUTHORIZATION=org.apache.cassandra.auth.CassandraAuthorizer \
cassandra:5.0.0
(2)客户端加密
docker run -d \
--name cassandra \
-p 9042:9042 \
-v cassandra_data:/var/lib/cassandra \
-v /path/to/certificates:/etc/cassandra/certs \
-e CASSANDRA_CLIENT_ENCRYPTION=all \
-e CASSANDRA_TRUSTSTORE=/etc/cassandra/certs/truststore.jks \
-e CASSANDRA_TRUSTSTORE_PASSWORD=your_password \
cassandra:5.0.0
5. 性能优化建议
(1)调整内存分配
docker run -d \
--name cassandra \
-p 9042:9042 \
-v cassandra_data:/var/lib/cassandra \
-e JVM_OPTS="-Xms4g -Xmx4g" \ # 设置堆内存
cassandra:5.0.0
(2)优化配置参数
通过挂载自定义 cassandra.yaml
文件调整参数:
concurrent_reads: 256
concurrent_writes: 192
native_transport_max_threads: 4096
四、总结
Cassandra 凭借其分布式架构和高性能特性,成为处理海量数据的理想选择。通过 Docker 快速部署和配置,可轻松搭建单机或集群环境。结合 CQL 的灵活查询能力和 5.0 版本的新特性(如向量搜索),Cassandra 能够满足 AI、物联网等新兴领域的需求。在实际应用中,需根据业务场景合理设计数据模型,并通过安全配置和性能优化确保系统稳定运行。
# 快速启动单机实例
docker run -d --name cassandra -p 9042:9042 cassandra:5.0.0
参考文档: