概述
Apache Cassandra 是一个高度可扩展的分布式 NoSQL 数据库,专为处理大量数据而设计。具有以下特点:
- 高可用性:去中心化架构,无单点故障
- 线性扩展:可轻松添加节点扩展容量
- 强一致性:可调节的一致性级别
- 高性能:针对写入操作进行优化
💡 提示: Cassandra 特别适合需要高写入吞吐量的应用场景,如日志记录、时间序列数据等。
环境准备
系统要求
- Docker 20.10+
- 内存:至少 2GB RAM
- 存储:SSD 推荐
- 网络:稳定的网络连接
依赖检查
# 检查 Docker 版本
docker --version
# 检查可用内存
free -h
# 检查磁盘空间
df -h
Docker 部署
单节点部署
# 创建Docker网络
docker network create cassandra-net
# 创建 Cassandra 容器
docker run -d \
--name cassandra \
--hostname cassandra \
--network cassandra-net \
-e CASSANDRA_CLUSTER_NAME="Test Cluster" \
-e CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch \
-e CASSANDRA_DC=datacenter1 \
-p 9042:9042 \
cassandra:4.1
环境变量说明
| 变量 | 说明 | 默认值 |
|---|---|---|
CASSANDRA_CLUSTER_NAME | 集群名称 | Test Cluster |
CASSANDRA_ENDPOINT_SNITCH | 端点侦察器 | SimpleSnitch |
CASSANDRA_DC | 数据中心名称 | datacenter1 |
CASSANDRA_SEEDS | 种子节点 | 第一个节点IP |
集群部署
# 创建 Docker 网络
docker network create cassandra-net
# 第一个节点
docker run -d \
--name cassandra-node1 \
--network cassandra-net \
-e CASSANDRA_CLUSTER_NAME="Production Cluster" \
-e CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch \
-e CASSANDRA_DC=datacenter1 \
-e CASSANDRA_RACK=rack1 \
-p 9042:9042 \
cassandra:4.1
# 等待第一个节点启动
sleep 60
# 第二个节点
docker run -d \
--name cassandra-node2 \
--network cassandra-net \
-e CASSANDRA_CLUSTER_NAME="Production Cluster" \
-e CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch \
-e CASSANDRA_DC=datacenter1 \
-e CASSANDRA_RACK=rack1 \
-e CASSANDRA_SEEDS=cassandra-node1 \
cassandra:4.1
基本配置
连接验证
# 进入 Cassandra 容器
docker exec -it cassandra cqlsh
# 或者使用认证连接
docker exec -it cassandra cqlsh -u cassandra -p cassandra
基本 CQL 操作
-- 创建 keyspace
CREATE KEYSPACE IF NOT EXISTS test_keyspace
WITH REPLICATION = {
'class': 'SimpleStrategy',
'replication_factor': 1
};
-- 使用 keyspace
USE test_keyspace;
-- 创建表
CREATE TABLE users (
id UUID PRIMARY KEY,
name TEXT,
email TEXT,
created_at TIMESTAMP
);
-- 插入数据
INSERT INTO users (id, name, email, created_at)
VALUES (uuid(), 'John Doe', 'john@example.com', toTimestamp(now()));
-- 查询数据
SELECT * FROM users;
数据操作
数据类型
| 类型 | 描述 | 示例 |
|---|---|---|
TEXT | 文本字符串 | ‘Hello World’ |
INT | 32位整数 | 123 |
BIGINT | 64位整数 | 1234567890 |
UUID | 通用唯一标识符 | uuid() |
TIMESTAMP | 时间戳 | ‘2025-01-01 00:00:00’ |
BOOLEAN | 布尔值 | true/false |
LIST | 列表 | [‘item1’, ‘item2’] |
MAP | 映射 | {‘key’: ‘value’} |
批量操作
-- 批量插入(注意:每次执行会生成不同的UUID)
BEGIN BATCH
INSERT INTO users (id, name, email) VALUES (uuid(), 'User1', 'user1@example.com');
INSERT INTO users (id, name, email) VALUES (uuid(), 'User2', 'user2@example.com');
INSERT INTO users (id, name, email) VALUES (uuid(), 'User3', 'user3@example.com');
APPLY BATCH;
-- 如果需要相同的UUID,先生成再使用:
-- INSERT INTO users (id, name, email) VALUES (550e8400-e29b-41d4-a716-446655440000, 'User1', 'user1@example.com');
索引管理
-- 创建二级索引
CREATE INDEX ON users (email);
-- 查看所有索引
DESCRIBE TABLE users;
-- 删除索引(需要实际索引名)
DROP INDEX IF EXISTS keyspace_name.index_name;
性能优化
分区键设计
🔧 配置: 选择合适的分区键对性能至关重要
-- 好的分区键设计
CREATE TABLE user_events (
user_id UUID,
event_time TIMESTAMP,
event_type TEXT,
event_data TEXT,
PRIMARY KEY (user_id, event_time)
) WITH CLUSTERING ORDER BY (event_time DESC);
压缩策略
-- 设置压缩策略
ALTER TABLE users WITH compression = {
'class': 'LZ4Compressor',
'chunk_length_in_kb': 64
};
缓存配置
-- 启用行缓存
ALTER TABLE users WITH caching = {
'keys': 'ALL',
'rows_per_partition': '100'
};
高级特性
物化视图(Materialized Views)
物化视图允许你基于现有表创建自动维护的查询表:
-- 创建基础表
CREATE TABLE user_activity (
user_id UUID,
activity_time TIMESTAMP,
activity_type TEXT,
activity_data TEXT,
PRIMARY KEY (user_id, activity_time)
);
-- 创建物化视图
CREATE MATERIALIZED VIEW user_activity_by_type AS
SELECT * FROM user_activity
WHERE activity_type IS NOT NULL AND user_id IS NOT NULL AND activity_time IS NOT NULL
PRIMARY KEY (activity_type, activity_time, user_id);
-- 现在可以高效查询特定类型的活动
SELECT * FROM user_activity_by_type WHERE activity_type = 'login';
用户定义类型(UDT)
创建复杂的数据结构:
-- 创建地址类型
CREATE TYPE address (
street TEXT,
city TEXT,
state TEXT,
zip_code TEXT,
country TEXT
);
-- 使用 UDT
CREATE TABLE users_with_address (
id UUID PRIMARY KEY,
name TEXT,
email TEXT,
home_address frozen<address>,
work_address frozen<address>
);
-- 插入数据
INSERT INTO users_with_address (id, name, email, home_address)
VALUES (
uuid(),
'John Doe',
'john@example.com',
{street: '123 Main St', city: 'New York', state: 'NY', zip_code: '10001', country: 'USA'}
);
用户定义函数(UDF)
⚠️ 注意: 使用UDF前需要在cassandra.yaml中启用:
enable_user_defined_functions: true enable_scripted_user_defined_functions: true # 如果使用脚本语言
创建自定义函数扩展 CQL 功能:
-- 创建简单的字符串函数
CREATE OR REPLACE FUNCTION capitalize(input TEXT)
RETURNS NULL ON NULL INPUT
RETURNS TEXT
LANGUAGE java
AS $$
return input.substring(0, 1).toUpperCase() + input.substring(1).toLowerCase();
$$;
-- 使用函数
SELECT id, capitalize(name) as capitalized_name FROM users;
时间序列数据处理
Cassandra 特别适合时间序列数据:
-- 时间序列表设计
CREATE TABLE sensor_data (
sensor_id TEXT,
bucket_date DATE,
reading_time TIMESTAMP,
temperature DOUBLE,
humidity DOUBLE,
pressure DOUBLE,
PRIMARY KEY ((sensor_id, bucket_date), reading_time)
) WITH CLUSTERING ORDER BY (reading_time DESC)
AND default_time_to_live = 2592000 -- 30天TTL
AND gc_grace_seconds = 864000; -- 10天
-- 写入数据
INSERT INTO sensor_data (sensor_id, bucket_date, reading_time, temperature, humidity, pressure)
VALUES ('sensor-001', '2025-01-14', toTimestamp(now()), 25.5, 60.2, 1013.25);
-- 查询特定时间范围
SELECT * FROM sensor_data
WHERE sensor_id = 'sensor-001'
AND bucket_date = '2025-01-14'
AND reading_time > '2025-01-14 10:00:00'
AND reading_time < '2025-01-14 11:00:00';
轻量级事务(LWT)
使用 IF 条件实现类似 ACID 的操作:
-- 条件插入(如果不存在)
INSERT INTO users (id, name, email)
VALUES (uuid(), 'Jane Doe', 'jane@example.com')
IF NOT EXISTS;
-- 条件更新
UPDATE users
SET email = 'newemail@example.com'
WHERE id = 123e4567-e89b-12d3-a456-426614174000
IF email = 'oldemail@example.com';
-- 条件删除
DELETE FROM users
WHERE id = 123e4567-e89b-12d3-a456-426614174000
IF email = 'jane@example.com';
最佳实践
数据建模原则
-
查询驱动设计
- 先设计查询,再设计数据模型
- 一个查询对应一个表(反范式化)
- 避免使用二级索引进行高频查询
-
分区键选择
- 确保数据均匀分布
- 避免热点分区
- 合理控制分区大小(建议不超过100MB)
-
时间分桶策略
-- 按月分桶示例 CREATE TABLE events_by_month ( event_type TEXT, year_month TEXT, -- 格式: '2025-01' event_time TIMESTAMP, event_data TEXT, PRIMARY KEY ((event_type, year_month), event_time) );
性能调优建议
-
批量操作优化
- 限制批量大小(建议5-15条)
- 使用 UNLOGGED BATCH 提高性能(注意:无原子性保证)
- 避免跨分区批量操作
-
读取优化
- 使用分页查询避免大量数据传输
- 合理设置 LIMIT 值
- 使用 TOKEN 函数进行范围扫描
-
写入优化
-- 使用 TTL 自动清理过期数据 INSERT INTO events (id, data) VALUES (uuid(), 'event data') USING TTL 86400; -- 24小时后自动删除 -- 使用异步写入 CONSISTENCY LOCAL_ONE;
集群管理最佳实践
-
节点扩容
- 使用 vnodes(虚拟节点)简化扩容
- 新节点加入前执行 repair
- 监控数据迁移进度
-
数据一致性
- 定期运行 repair 操作
- 合理设置一致性级别
- 使用 LOCAL_QUORUM 平衡性能和一致性
-
备份策略
# 创建定期备份脚本 #!/bin/bash BACKUP_DIR="/backup/cassandra/$(date +%Y%m%d)" mkdir -p $BACKUP_DIR # 创建快照 docker exec cassandra nodetool snapshot -t backup_$(date +%Y%m%d_%H%M%S) # 复制快照文件 docker cp cassandra:/var/lib/cassandra/data $BACKUP_DIR/
安全配置
-
认证和授权
-- 创建新用户 CREATE USER app_user WITH PASSWORD 'strong_password'; -- 授予权限 GRANT SELECT ON test_keyspace.users TO app_user; GRANT MODIFY ON test_keyspace.users TO app_user; -- 撤销权限 REVOKE MODIFY ON test_keyspace.users FROM app_user; -
网络安全
- 启用节点间加密
- 配置客户端加密
- 使用防火墙限制访问
监控指标
重要监控指标:
- 读写延迟: 99th percentile latency
- 待处理任务: Pending compactions, flushes
- 磁盘使用: 空间使用率和增长趋势
- GC 暂停: GC pause time and frequency
- 连接数: Active client connections
生产环境部署指南
硬件要求与规划
最小配置(单节点)
- CPU: 8 核心以上
- 内存: 32GB RAM(建议 64GB)
- 存储: SSD 至少 1TB
- 网络: 千兆以太网
推荐配置(生产集群)
- CPU: 16-32 核心
- 内存: 64-128GB RAM
- 存储: NVMe SSD 2-4TB
- 网络: 万兆以太网
集群规模规划
小型集群(< 10TB)
├── 节点数:3-6 个
├── 副本因子:3
└── 一致性级别:QUORUM
中型集群(10-100TB)
├── 节点数:6-20 个
├── 副本因子:3
├── 数据中心:1-2 个
└── 一致性级别:LOCAL_QUORUM
大型集群(> 100TB)
├── 节点数:20+ 个
├── 副本因子:3
├── 数据中心:2+ 个
└── 一致性级别:EACH_QUORUM
系统优化配置
1. 操作系统优化
# /etc/sysctl.conf
vm.max_map_count = 1048576
vm.swappiness = 1
net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 10
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_rmem = 4096 87380 134217728
net.ipv4.tcp_wmem = 4096 65536 134217728
# 应用配置
sudo sysctl -p
2. 文件句柄限制
# /etc/security/limits.conf
cassandra soft nofile 100000
cassandra hard nofile 100000
cassandra soft nproc 32768
cassandra hard nproc 32768
cassandra soft memlock unlimited
cassandra hard memlock unlimited
3. 磁盘优化
# 禁用 atime 更新
mount -o remount,noatime,nodiratime /data
# XFS 文件系统格式化
mkfs.xfs -f -d su=64k,sw=1 /dev/nvme0n1
# 挂载选项
mount -o noatime,nodiratime,nobarrier,logbufs=8 /dev/nvme0n1 /data/cassandra
JVM 调优配置
cassandra-env.sh 优化
# 堆内存设置(物理内存的 1/4 到 1/2)
MAX_HEAP_SIZE="32G"
HEAP_NEWSIZE="8G"
# GC 配置(Java 8)
JVM_OPTS="$JVM_OPTS -XX:+UseG1GC"
JVM_OPTS="$JVM_OPTS -XX:G1RSetUpdatingPauseTimePercent=5"
JVM_OPTS="$JVM_OPTS -XX:MaxGCPauseMillis=200"
JVM_OPTS="$JVM_OPTS -XX:InitiatingHeapOccupancyPercent=45"
JVM_OPTS="$JVM_OPTS -XX:+AlwaysPreTouch"
JVM_OPTS="$JVM_OPTS -XX:-UseBiasedLocking"
JVM_OPTS="$JVM_OPTS -XX:+UseTLAB"
JVM_OPTS="$JVM_OPTS -XX:+ResizeTLAB"
# 性能监控
JVM_OPTS="$JVM_OPTS -XX:+PrintGCDetails"
JVM_OPTS="$JVM_OPTS -XX:+PrintGCDateStamps"
JVM_OPTS="$JVM_OPTS -XX:+PrintHeapAtGC"
JVM_OPTS="$JVM_OPTS -XX:+PrintTenuringDistribution"
JVM_OPTS="$JVM_OPTS -Xloggc:/var/log/cassandra/gc.log"
JVM_OPTS="$JVM_OPTS -XX:+UseGCLogFileRotation"
JVM_OPTS="$JVM_OPTS -XX:NumberOfGCLogFiles=10"
JVM_OPTS="$JVM_OPTS -XX:GCLogFileSize=10M"
生产环境 cassandra.yaml 配置
# 集群配置
cluster_name: 'Production Cluster'
num_tokens: 256
allocate_tokens_for_local_replication_factor: 3
# 网络配置
listen_address: 10.0.1.10 # 节点内部通信 IP
rpc_address: 0.0.0.0
broadcast_address: 10.0.1.10
broadcast_rpc_address: 10.0.1.10
# 性能调优
concurrent_reads: 64
concurrent_writes: 64
concurrent_counter_writes: 32
concurrent_materialized_view_writes: 32
# 内存配置
memtable_heap_space_in_mb: 2048
memtable_offheap_space_in_mb: 2048
memtable_cleanup_threshold: 0.11
# 缓存配置
key_cache_size_in_mb: 1000
key_cache_save_period: 14400
row_cache_size_in_mb: 0 # 通常禁用
counter_cache_size_in_mb: 50
# 压缩配置
commitlog_compression:
- class_name: LZ4Compressor
# 安全配置
authenticator: PasswordAuthenticator
authorizer: CassandraAuthorizer
role_manager: CassandraRoleManager
# 备份配置
incremental_backups: true
snapshot_before_compaction: false
# 压缩策略
compaction_throughput_mb_per_sec: 64
compaction_large_partition_warning_threshold_mb: 100
# 流控制
stream_throughput_outbound_megabits_per_sec: 200
inter_dc_stream_throughput_outbound_megabits_per_sec: 50
多数据中心部署
1. 网络拓扑配置
# cassandra-topology.properties
# 数据中心 DC1
10.0.1.10=DC1:RAC1
10.0.1.11=DC1:RAC1
10.0.1.12=DC1:RAC2
10.0.1.13=DC1:RAC2
# 数据中心 DC2
10.0.2.10=DC2:RAC1
10.0.2.11=DC2:RAC1
10.0.2.12=DC2:RAC2
10.0.2.13=DC2:RAC2
# 默认配置
default=DC1:RAC1
2. 跨数据中心复制策略
CREATE KEYSPACE multi_dc_keyspace
WITH REPLICATION = {
'class': 'NetworkTopologyStrategy',
'DC1': 3,
'DC2': 3
}
AND durable_writes = true;
监控与告警配置
1. JMX 监控配置
# cassandra-env.sh
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.port=7199"
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.rmi.port=7199"
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl=false"
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.authenticate=true"
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.password.file=/etc/cassandra/jmxremote.password"
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.access.file=/etc/cassandra/jmxremote.access"
2. Prometheus 集成
# prometheus.yml
scrape_configs:
- job_name: 'cassandra'
static_configs:
- targets: ['10.0.1.10:7070', '10.0.1.11:7070', '10.0.1.12:7070']
relabel_configs:
- source_labels: [__address__]
regex: '([^:]+):.*'
target_label: instance
replacement: '${1}'
3. 关键监控指标
# 必须监控的指标
监控指标:
系统级:
- CPU 使用率 < 80%
- 内存使用率 < 85%
- 磁盘使用率 < 80%
- 磁盘 I/O 延迟 < 10ms
Cassandra 级:
- 读延迟 P99 < 100ms
- 写延迟 P99 < 10ms
- Pending compactions < 10
- Dropped messages = 0
- GC 暂停时间 < 200ms
- Heap 使用率 < 75%
备份与恢复策略
1. 自动化备份脚本
#!/bin/bash
# cassandra-backup.sh
BACKUP_DIR="/backup/cassandra/$(date +%Y%m%d_%H%M%S)"
KEYSPACES="keyspace1 keyspace2 keyspace3"
RETENTION_DAYS=7
# 创建备份目录
mkdir -p $BACKUP_DIR
# 执行快照
for keyspace in $KEYSPACES; do
echo "Backing up keyspace: $keyspace"
nodetool snapshot -t backup_$(date +%Y%m%d_%H%M%S) $keyspace
done
# 复制快照文件
for keyspace in $KEYSPACES; do
find /var/lib/cassandra/data/$keyspace -name "backup_*" -type d | while read snap_dir; do
table=$(echo $snap_dir | cut -d'/' -f6)
mkdir -p $BACKUP_DIR/$keyspace/$table
cp -r $snap_dir/* $BACKUP_DIR/$keyspace/$table/
done
done
# 清理旧快照
nodetool clearsnapshot
# 删除过期备份
find /backup/cassandra -type d -mtime +$RETENTION_DAYS -exec rm -rf {} \;
# 上传到对象存储(可选)
# aws s3 sync $BACKUP_DIR s3://cassandra-backups/$(hostname)/
2. 恢复流程
# 1. 停止 Cassandra
systemctl stop cassandra
# 2. 清理数据目录
rm -rf /var/lib/cassandra/data/keyspace_name/*
# 3. 恢复数据
cp -r /backup/cassandra/20250114_120000/keyspace_name/* /var/lib/cassandra/data/keyspace_name/
# 4. 修改权限
chown -R cassandra:cassandra /var/lib/cassandra/data/
# 5. 启动 Cassandra
systemctl start cassandra
# 6. 运行 repair
nodetool repair -pr keyspace_name
安全加固
1. 认证配置
-- 创建管理员用户
CREATE ROLE admin WITH PASSWORD = 'strong_password'
AND SUPERUSER = true
AND LOGIN = true;
-- 创建应用用户
CREATE ROLE app_user WITH PASSWORD = 'app_password'
AND LOGIN = true;
-- 授权
GRANT SELECT ON keyspace.table TO app_user;
GRANT MODIFY ON keyspace.table TO app_user;
-- 删除默认用户
DROP ROLE cassandra;
2. 网络加密配置
# cassandra.yaml
server_encryption_options:
internode_encryption: all
keystore: /etc/cassandra/keystore.jks
keystore_password: keystore_password
truststore: /etc/cassandra/truststore.jks
truststore_password: truststore_password
protocol: TLS
algorithm: SunX509
cipher_suites: [TLS_RSA_WITH_AES_256_CBC_SHA256]
client_encryption_options:
enabled: true
optional: false
keystore: /etc/cassandra/keystore.jks
keystore_password: keystore_password
故障处理手册
1. 节点宕机恢复
# 检查节点状态
nodetool status
# 如果节点 DOWN,尝试重启
systemctl restart cassandra
# 检查日志
tail -f /var/log/cassandra/system.log
# 运行修复
nodetool repair -pr
2. 数据一致性修复
# 全量修复(影响性能)
nodetool repair
# 增量修复(推荐)
nodetool repair -inc
# 主键范围修复
nodetool repair -pr
# 特定表修复
nodetool repair keyspace table
3. 性能问题排查
# 查看慢查询(需先启用追踪)
nodetool settraceprobability 0.1 # 追踪10%的查询
nodetool toppartitions keyspace table 1000
# 查看大分区
nodetool tablehistograms keyspace table
# 查看等待的压缩
nodetool compactionpending
# 强制压缩
nodetool compact keyspace table
容量规划
存储容量计算
实际数据大小 = 原始数据 × 副本因子 × (1 - 压缩率)
推荐预留空间 = 实际数据大小 × 2.5
示例:
- 原始数据:1TB
- 副本因子:3
- 压缩率:50%
- 实际占用:1TB × 3 × (1 - 0.5) = 1.5TB
- 推荐容量:1.5TB × 2.5 = 3.75TB
节点扩容流程
# 1. 准备新节点
# 安装相同版本的 Cassandra
# 配置相同的 cluster_name
# 配置正确的种子节点
# 2. 启动新节点
systemctl start cassandra
# 3. 监控数据迁移
nodetool netstats
# 4. 完成后运行清理
nodetool cleanup # 在所有旧节点上运行
监控与维护
集群状态检查
# 检查节点状态
docker exec -it cassandra nodetool status
# 检查集群信息
docker exec -it cassandra nodetool info
# 检查性能指标
docker exec -it cassandra nodetool tpstats
数据备份
# 创建快照
docker exec -it cassandra nodetool snapshot test_keyspace
# 列出快照
docker exec -it cassandra nodetool listsnapshots
# 清理快照
docker exec -it cassandra nodetool clearsnapshot
日志监控
# 查看 Cassandra 日志
docker logs cassandra
# 实时监控日志
docker logs -f cassandra
常见问题
问题1:容器启动失败
现象: 容器无法正常启动 原因: 内存不足或端口冲突 解决方案:
# 检查内存使用情况
free -h
# 检查端口占用
netstat -tlnp | grep 9042
# 增加内存限制
docker run -m 4g --name cassandra cassandra:latest
问题2:连接超时
现象: CQL 连接超时 原因: 网络配置或防火墙问题 解决方案:
# 检查网络连接
telnet localhost 9042
# 检查防火墙设置
sudo ufw status
问题3:数据写入失败
现象: 写入操作返回错误 原因: 一致性级别设置过高 解决方案:
-- 降低一致性级别
CONSISTENCY QUORUM;
-- 或者
CONSISTENCY ONE;
⚠️ 注意: 降低一致性级别会影响数据一致性保证,请根据业务需求谨慎选择。
相关文章
Cassandra 专题
- Cassandra 压缩策略详解 - 深入了解数据压缩
- Cassandra 学习大纲 - 系统学习路径
数据库对比
- MongoDB 文档数据库 - 文档型 NoSQL
- Redis 内存数据库 - 键值型 NoSQL
- MySQL 关系型数据库 - 传统 RDBMS
- Elasticsearch 搜索引擎 - 全文搜索
- ClickHouse 列式数据库 - OLAP 分析
大数据技术栈
- Flink 实时计算与 Cassandra 集成
- Kafka 消息队列 - 数据流处理
容器化部署
- Docker 基本命令 - 容器管理
- Docker 环境部署 - 服务部署
- Docker Compose - 多容器编排
监控运维
- ELK Stack 日志分析 - 日志收集
- SkyWalking 链路追踪 - APM 监控
开发集成
- [Java 数据库编程](../../开发/编程语言/Java/JAVA EE/) - JDBC/ORM