前言:为什么这个时代需要"时序数据库"和"分布式宽表"?
2025年的数据战场呈现两极分化:
- IoT设备每秒产生10亿级传感器数据(时序场景)
- AI训练需要PB级特征矩阵存储(宽表场景)
本文将用3个真实生产案例贯穿全文,手把手带你从0到1掌握两大神器:
维度 | Apache Cassandra | InfluxDB |
---|---|---|
核心定位 | 分布式宽表数据库 | 时序数据库 |
最佳场景 | 用户画像/订单存储 | 监控/IoT/指标 |
写入性能 | 1000万TPS/节点 | 500万points/sec |
查询语言 | CQL | Flux/SQL |
第一章:环境准备(5分钟极速搭建)
1.1 一键启动脚本
# Cassandra 5.0 集群(3节点)
docker network create cassandra-net && \
docker run -d --name cass-node1 --net cassandra-net \
-e CASSANDRA_CLUSTER_NAME=killrvideo \
-e CASSANDRA_DC=dc1 -e CASSANDRA_RACK=rack1 \
cassandra:5.0 && \
docker run -d --name cass-node2 --net cassandra-net \
-e CASSANDRA_SEEDS=cass-node1 cassandra:5.0
# InfluxDB 3.0 单节点
docker run -d --name influxdb3 \
-p 8086:8086 \
-e INFLUXDB_REPORTING_DISABLED=true \
influxdb:3.0
1.2 连接工具推荐
- Cassandra:DataStax Studio(2025新版支持AI查询优化)
- InfluxDB:Chronograf 2.7(内建Flux调试器)
第二章:核心概念对比(用电商订单案例)
2.1 Cassandra数据模型
-- 订单表设计(宽表模式)
CREATE TABLE orders (
customer_id uuid,
order_month text,
order_time timestamp,
items list<frozen<item>>,
total_amount decimal,
PRIMARY KEY ((customer_id, order_month), order_time)
) WITH CLUSTERING ORDER BY (order_time DESC);
设计要点:
- 分区键
(customer_id, order_month)
避免热点 - 聚簇列
order_time
支持时间范围查询
2.2 InfluxDB数据模型
// 订单指标存储(时序模式)
from(bucket: "orders")
|> range(start: -30d)
|> filter(fn: (r) => r._measurement == "order_events")
|> filter(fn: (r) => r.customer_id == "123e4567...")
|> aggregateWindow(every: 1h, fn: sum, column: "_value")
关键区别:
- Line Protocol格式:
order_events,customer_id=123 amount=99.9 1625097600000000000
- 自动压缩:60%存储节省(2025新版TSM引擎)
第三章:高级操作实战
3.1 Cassandra性能调优
# cassandra.yaml 关键配置
concurrent_reads: 32 # 根据CPU核心数调整
concurrent_writes: 32
memtable_allocation_type: offheap_objects # 减少GC压力
compression:
- class: LZ4Compressor # 新版压缩算法
chunk_length_in_kb: 64
JVM调优参数:
export JVM_OPTS="-Xms8G -Xmx8G \
-XX:+UseZGC \
-XX:MaxDirectMemorySize=16G"
3.2 InfluxDB 3.0新特性:列式存储
// 使用新版列式函数
import "experimental/iox"
from(bucket: "iot_sensors")
|> iox.sql(query: """
SELECT
DATE_BIN(INTERVAL '5 minutes', time, '1970-01-01') AS time,
AVG(temperature) AS avg_temp
FROM sensors
WHERE time > now() - INTERVAL '1 day'
GROUP BY time, device_id
""")
第四章:混合架构案例(Uber实时调度系统)
4.1 架构图
4.2 关键代码
Cassandra查询:
// 获取附近司机(地理哈希)
PreparedStatement stmt = session.prepare(
"SELECT * FROM driver_locations " +
"WHERE geohash_prefix = ? AND " +
"last_updated > ? LIMIT 100");
InfluxDB查询:
// 计算区域供需比
from(bucket: "supply_demand")
|> range(start: -5m)
|> filter(fn: (r) => r._field == "driver_count" or r._field == "request_count")
|> pivot(rowKey:["_time"], columnKey: ["_field"], valueColumn: "_value")
|> map(fn: (r) => ({r with ratio: r.driver_count / r.request_count}))
第五章:故障排查宝典
5.1 Cassandra常见问题
现象 | 根因 | 解决方案 |
---|---|---|
写入超时 | 磁盘IO瓶颈 | 检查sstable_compression 设置 |
热点分区 | 分区键设计缺陷 | 增加虚拟节点(num_tokens: 256 ) |
读取延迟高 | BloomFilter失效 | 调整bloom_filter_fp_chance: 0.01 |
5.2 InfluxDB诊断命令
# 检查分片压力
influx inspect report-tsm --bucket-id 12345
# 内存使用分析
influx query 'import "runtime" runtime.memStats()'
第六章:2025年的新趋势
6.1 Cassandra 6.0预览
- AI驱动的自动分片:基于负载预测调整分区
- 原生JSON支持:
SELECT JSON * FROM table
- 与Paimon集成:实现湖仓一体架构
6.2 InfluxDB Edge计算
- 边缘节点同步:延迟<50ms的工业场景
- Rust重写存储引擎:性能提升300%
附录:学习路线图
资源推荐
- Cassandra:《Cassandra权威指南(2025版)》新增向量检索章节
- InfluxDB:官方认证课程(含Flux调试实战)
在2025年,选择Cassandra还是InfluxDB?答案是:全都要。就像Uber同时用Redis和MySQL一样,每个工具解决不同维度的问题。真正的架构师,是让它们协同工作。