目录
-
- 摘要
- 一、时序数据库:数据洪流时代的必然选择
-
- [1.1 什么是时序数据](#1.1 什么是时序数据)
- [1.2 为什么需要时序数据库](#1.2 为什么需要时序数据库)
- [1.3 时序数据库的发展历程](#1.3 时序数据库的发展历程)
- 二、DolphinDB:重新定义时序数据库
-
- [2.1 DolphinDB简介](#2.1 DolphinDB简介)
- [2.2 DolphinDB核心特性](#2.2 DolphinDB核心特性)
-
- [2.2.1 极致的写入性能](#2.2.1 极致的写入性能)
- [2.2.2 强大的计算能力](#2.2.2 强大的计算能力)
- [2.2.3 灵活的存储策略](#2.2.3 灵活的存储策略)
- [2.2.4 丰富的数据接口](#2.2.4 丰富的数据接口)
- [2.3 DolphinDB与传统数据库对比](#2.3 DolphinDB与传统数据库对比)
- 三、DolphinDB应用场景
-
- [3.1 工业物联网](#3.1 工业物联网)
- [3.2 金融领域](#3.2 金融领域)
- [3.3 能源管理](#3.3 能源管理)
- [3.4 其他领域](#3.4 其他领域)
- 四、DolphinDB架构解析
-
- [4.1 整体架构](#4.1 整体架构)
- [4.2 核心组件](#4.2 核心组件)
-
- [4.2.1 控制节点(Controller)](#4.2.1 控制节点(Controller))
- [4.2.2 数据节点(Data Node)](#4.2.2 数据节点(Data Node))
- [4.2.3 代理节点(Agent)](#4.2.3 代理节点(Agent))
- [4.3 存储引擎](#4.3 存储引擎)
- 五、快速体验DolphinDB
-
- [5.1 安装部署](#5.1 安装部署)
- [5.2 连接DolphinDB](#5.2 连接DolphinDB)
-
- [5.2.1 Web GUI](#5.2.1 Web GUI)
- [5.2.2 Python API](#5.2.2 Python API)
- [5.2.3 Java API](#5.2.3 Java API)
- [5.3 基础操作](#5.3 基础操作)
-
- [5.3.1 创建数据库和表](#5.3.1 创建数据库和表)
- [5.3.2 插入数据](#5.3.2 插入数据)
- [5.3.3 查询数据](#5.3.3 查询数据)
- 六、DolphinDB在工业物联网中的优势
-
- [6.1 海量数据写入](#6.1 海量数据写入)
- [6.2 实时计算能力](#6.2 实时计算能力)
- [6.3 高效的历史数据查询](#6.3 高效的历史数据查询)
- [6.4 丰富的时序函数](#6.4 丰富的时序函数)
- 七、DolphinDB学习路线图
-
- [7.1 入门阶段(1-2周)](#7.1 入门阶段(1-2周))
- [7.2 进阶阶段(2-4周)](#7.2 进阶阶段(2-4周))
- [7.3 实战阶段(1-2月)](#7.3 实战阶段(1-2月))
- 八、总结
- 参考资料
摘要
本文作为DolphinDB工业物联网实战系列的开篇之作,将深入探讨时序数据库的核心概念与DolphinDB的独特优势。通过对比InfluxDB、TimescaleDB等主流时序数据库,分析DolphinDB在海量数据写入、实时计算、分布式架构等方面的技术特点。读者将了解时序数据库的选型标准,掌握DolphinDB的核心能力,为后续的工业物联网实战打下坚实基础。本文适合数据工程师、物联网开发者以及对时序数据处理感兴趣的技术人员阅读。
一、时序数据库:数据洪流时代的必然选择
1.1 什么是时序数据
时序数据(Time Series Data)是指按照时间顺序记录的数据点序列。在工业物联网、金融交易、监控告警、能源管理等场景中,时序数据无处不在。
时序数据的典型特征:
| 特征 | 说明 | 示例 |
|---|---|---|
| 时间戳为核心 | 每条数据都有精确的时间标记 | 设备传感器每秒采集的温度数据 |
| 高频写入 | 数据持续产生,写入频率极高 | 1000台设备,每秒10次采集 |
| 海量存储 | 数据量随时间线性增长 | 一年存储量可达TB级 |
| 时间范围查询 | 查询通常基于时间范围 | 查询最近1小时的设备状态 |
| 聚合计算 | 需要对时间窗口进行聚合 | 计算每分钟的平均温度 |
| 数据不可变 | 历史数据通常不修改 | 传感器历史读数保持不变 |
1.2 为什么需要时序数据库
传统关系型数据库(如MySQL、PostgreSQL)在处理时序数据时面临诸多挑战:
传统数据库痛点
写入性能瓶颈
存储成本高昂
查询效率低下
扩展性受限
单机写入QPS有限
索引维护开销大
未针对时序优化
压缩率低
时间范围查询慢
聚合计算效率差
分库分表复杂
运维成本高
时序数据库针对这些痛点进行了专门优化:
- 高吞吐写入:采用LSM-Tree等存储引擎,支持每秒百万级写入
- 高效压缩:针对时序数据特点的压缩算法,压缩率可达10:1甚至更高
- 时间索引:原生支持时间范围查询,毫秒级响应
- 内置聚合:提供丰富的时序聚合函数,如滑动窗口、降采样等
- 水平扩展:分布式架构支持PB级数据存储
1.3 时序数据库的发展历程
2011 OpenTSDB发布<br/>基于HBase的时序存储 2013 InfluxDB诞生<br/>专用时序数据库代表 2015 Prometheus发布<br/>监控领域时序数据库 2017 TimescaleDB出现<br/>基于PostgreSQL扩展 2018 DolphinDB开源<br/>高性能分布式时序数据库 2020 TDengine开源<br/>国产时序数据库崛起 2023 时序数据库百花齐放<br/>云原生、AI融合 时序数据库发展历程
二、DolphinDB:重新定义时序数据库
2.1 DolphinDB简介
DolphinDB是由浙江智臾科技有限公司研发的一款高性能分布式时序数据库。它集成了数据库 、编程语言 和计算引擎三大核心能力,在金融、物联网、能源等领域得到广泛应用。
DolphinDB核心定位:
DolphinDB核心能力
时序数据库
海量存储
高效查询
数据压缩
编程语言
DolphinDB脚本
向量化计算
自定义函数
计算引擎
流计算
分布式计算
机器学习
2.2 DolphinDB核心特性
2.2.1 极致的写入性能
DolphinDB采用创新的存储架构,单节点支持每秒千万级数据写入,分布式集群可线性扩展至每秒亿级写入。
| 对比项 | DolphinDB | InfluxDB | TimescaleDB |
|---|---|---|---|
| 单节点写入QPS | 1000万+ | 100万 | 50万 |
| 分布式扩展 | ✅ 原生支持 | ⚠️ 企业版 | ✅ 需手动分片 |
| 写入延迟 | 毫秒级 | 毫秒级 | 秒级 |
2.2.2 强大的计算能力
DolphinDB内置完整的编程语言,支持复杂的数据处理和分析:
- 1400+内置函数:涵盖数学、统计、时间序列、字符串等
- 向量化计算:充分利用CPU指令集,性能提升10-100倍
- 分布式计算:MapReduce模式,自动并行化
- 流计算引擎:实时数据处理,毫秒级延迟
2.2.3 灵活的存储策略
DolphinDB支持多种分区策略,满足不同业务场景:
| 分区类型 | 适用场景 | 示例 |
|---|---|---|
| VALUE分区 | 枚举值查询 | 按设备ID分区 |
| RANGE分区 | 范围查询 | 按时间范围分区 |
| HASH分区 | 均匀分布 | 按用户ID哈希 |
| COMPO分区 | 多维度查询 | 时间+设备组合分区 |
2.2.4 丰富的数据接口
DolphinDB提供多种数据接入方式:
DolphinDB
接入方式
数据源
传感器
数据库
消息队列
文件
MQTT
OPC-UA
JDBC/ODBC
Kafka
CSV/Parquet
分布式存储
2.3 DolphinDB与传统数据库对比
| 对比维度 | DolphinDB | MySQL | InfluxDB | TimescaleDB |
|---|---|---|---|---|
| 写入性能 | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| 查询性能 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 计算能力 | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐ | ⭐⭐⭐ |
| 分布式 | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
| 学习曲线 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 生态成熟度 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 国产化 | ✅ | ❌ | ❌ | ❌ |
三、DolphinDB应用场景
3.1 工业物联网
工业物联网是DolphinDB最重要的应用领域之一。在智能制造、能源管理、设备监控等场景中,DolphinDB发挥着关键作用。
典型应用场景:
工业物联网场景
设备监控
实时状态追踪
故障预警
能耗管理
能耗数据采集
能耗分析优化
质量控制
SPC统计过程控制
质量追溯
预测性维护
设备健康评估
故障预测
工业物联网数据特点:
| 特点 | 说明 | DolphinDB优势 |
|---|---|---|
| 高频采集 | 设备每秒采集数十次 | 高吞吐写入 |
| 海量设备 | 数千甚至数万台设备 | 分布式存储 |
| 实时监控 | 毫秒级响应要求 | 流计算引擎 |
| 历史分析 | TB级历史数据查询 | 高效压缩+索引 |
| 多源异构 | 不同协议、不同格式 | 丰富数据接口 |
3.2 金融领域
DolphinDB在金融领域同样表现出色:
- 高频交易:毫秒级行情数据处理
- 量化分析:历史数据回测与因子计算
- 风险监控:实时风险指标计算
- 交易监控:异常交易检测与告警
3.3 能源管理
- 电力监控:电网运行数据实时采集与分析
- 新能源:风电、光伏发电数据管理
- 能耗优化:工厂能耗数据采集与优化建议
3.4 其他领域
| 领域 | 应用场景 |
|---|---|
| 车联网 | 车辆轨迹追踪、驾驶行为分析 |
| 智慧城市 | 交通流量监控、环境监测 |
| 医疗健康 | 可穿戴设备数据、医疗监护 |
| 航空航天 | 飞行数据记录与分析 |
四、DolphinDB架构解析
4.1 整体架构
数据源
存储层
计算层
客户端层
Web GUI
Python API
Java API
REST API
控制节点
Controller
代理节点
Agent
数据节点1
数据节点2
数据节点3
传感器
数据库
消息队列
4.2 核心组件
4.2.1 控制节点(Controller)
控制节点是DolphinDB集群的大脑,负责:
- 元数据管理:存储表结构、分区信息等元数据
- 任务调度:协调分布式计算任务
- 集群管理:节点状态监控、故障恢复
4.2.2 数据节点(Data Node)
数据节点负责实际的数据存储和计算:
- 数据存储:存储分区数据
- 查询执行:执行查询和计算任务
- 数据复制:支持多副本数据冗余
4.2.3 代理节点(Agent)
代理节点部署在每个物理服务器上,负责:
- 节点启停:启动和停止数据节点
- 资源监控:监控CPU、内存、磁盘使用情况
- 日志收集:收集节点运行日志
4.3 存储引擎
DolphinDB采用列式存储引擎,针对时序数据进行了深度优化:
| 优化技术 | 说明 | 效果 |
|---|---|---|
| 列式存储 | 同类数据连续存储 | 高压缩率、高效扫描 |
| 时间分区 | 按时间范围分区 | 快速时间范围查询 |
| 数据压缩 | LZ4、Delta编码等 | 10:1压缩率 |
| 索引优化 | 稀疏索引、布隆过滤器 | 快速定位数据 |
五、快速体验DolphinDB
5.1 安装部署
DolphinDB支持多种安装方式,这里以Linux单机版为例:
bash
# 下载DolphinDB
wget https://www.dolphindb.com/downloads/DolphinDB_Linux64_V2.00.11.1.zip
# 解压
unzip DolphinDB_Linux64_V2.00.11.1.zip -d /opt/dolphindb
# 进入目录
cd /opt/dolphindb/server
# 启动服务
./dolphindb -console 0 -mode single -home . -config config/single.cfg -logFile log/dolphindb.log
上述命令完成了DolphinDB的下载、解压和启动。其中-mode single表示单机模式,-config指定配置文件路径,-logFile指定日志文件路径。启动后,DolphinDB默认监听8848端口。
5.2 连接DolphinDB
DolphinDB提供多种连接方式:
5.2.1 Web GUI
打开浏览器访问 http://localhost:8848,即可使用DolphinDB内置的Web GUI:
![DolphinDB Web GUI界面]
图:DolphinDB Web GUI提供了友好的交互界面,支持脚本编辑、数据浏览、可视化展示等功能
5.2.2 Python API
python
# 安装DolphinDB Python API
pip install dolphindb
# 连接DolphinDB
import dolphindb as ddb
session = ddb.session()
session.connect('localhost', 8848, 'admin', '123456')
# 执行脚本
result = session.run('1 + 1')
print(result) # 输出: 2
上述Python代码展示了如何使用DolphinDB Python API连接数据库并执行简单脚本。首先通过pip install dolphindb安装API,然后创建session对象,调用connect方法连接到DolphinDB服务器,最后使用run方法执行DolphinDB脚本。
5.2.3 Java API
java
// Maven依赖
<dependency>
<groupId>com.dolphindb</groupId>
<artifactId>dolphindb-java-api</artifactId>
<version>2.00.11.1</version>
</dependency>
// Java连接示例
import com.xxdb.DBConnection;
import com.xxdb.data.Entity;
public class DolphinDBExample {
public static void main(String[] args) throws Exception {
DBConnection conn = new DBConnection();
conn.connect("localhost", 8848, "admin", "123456");
Entity result = conn.run("1 + 1");
System.out.println(result); // 输出: 2
}
}
上述Java代码展示了如何使用DolphinDB Java API连接数据库。首先添加Maven依赖,然后创建DBConnection对象,调用connect方法建立连接,最后使用run方法执行脚本。
5.3 基础操作
5.3.1 创建数据库和表
python
# 创建分布式数据库
session.run('''
// 创建数据库(按日期范围分区)
db = database("dfs://iot_demo", RANGE, 2024.01.01..2024.12.31)
// 创建表结构
schema = table(1:0, `device_id`timestamp`temperature`humidity`pressure,
[INT, TIMESTAMP, DOUBLE, DOUBLE, DOUBLE])
// 创建分布式表
db.createPartitionedTable(schema, `sensor_data, `timestamp)
''')
上述代码创建了一个名为iot_demo的分布式数据库,按日期范围进行分区。表结构包含设备ID、时间戳、温度、湿度和压力五个字段,其中时间戳作为分区键。
5.3.2 插入数据
python
# 模拟传感器数据
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
# 生成测试数据
num_records = 10000
timestamps = [datetime(2024, 1, 1) + timedelta(seconds=i) for i in range(num_records)]
device_ids = np.random.randint(1, 100, num_records)
temperatures = np.random.uniform(20, 30, num_records)
humidities = np.random.uniform(40, 60, num_records)
pressures = np.random.uniform(1000, 1020, num_records)
# 创建DataFrame
df = pd.DataFrame({
'device_id': device_ids,
'timestamp': timestamps,
'temperature': temperatures,
'humidity': humidities,
'pressure': pressures
})
# 上传数据到DolphinDB
session.upload({'sensor_df': df})
# 插入数据
session.run('''
loadTable("dfs://iot_demo", "sensor_data").append!(sensor_df)
''')
print(f"成功插入 {num_records} 条数据")
上述代码模拟了10000条传感器数据,包含设备ID、时间戳、温度、湿度和压力。通过session.upload将Python DataFrame上传到DolphinDB,然后使用append!方法将数据插入到分布式表中。
5.3.3 查询数据
python
# 查询最近1小时的平均温度
result = session.run('''
// 加载表
t = loadTable("dfs://iot_demo", "sensor_data")
// 查询每个设备的平均温度
select avg(temperature) as avg_temp,
avg(humidity) as avg_humidity,
count(*) as record_count
from t
group by device_id
order by avg_temp desc
''')
print(result)
上述查询语句展示了DolphinDB的SQL语法。通过loadTable加载分布式表,然后使用标准的SQL语法进行聚合查询,计算每个设备的平均温度、平均湿度和记录数,并按平均温度降序排列。
六、DolphinDB在工业物联网中的优势
6.1 海量数据写入
工业物联网场景下,数千台设备每秒产生海量数据。DolphinDB的写入性能远超传统数据库:
1000台设备
每秒10次采集
每秒10000条数据
DolphinDB
单节点轻松承载
6.2 实时计算能力
DolphinDB的流计算引擎支持实时数据处理:
python
# 创建流数据表
session.run('''
// 创建流表
share streamTable(1:0, `device_id`timestamp`temperature, [INT, TIMESTAMP, DOUBLE]) as sensor_stream
// 创建时间序列引擎(每10秒计算一次平均温度)
engine = createTimeSeriesEngine("temp_engine", 10000, 10000,
<[avg(temperature) as avg_temp, max(temperature) as max_temp, min(temperature) as min_temp]>,
sensor_stream, `device_id, `timestamp)
// 订阅流表
subscribeTable(, "sensor_stream", "temp_engine", -1, append!{engine}, true)
''')
上述代码创建了一个流数据表和时间序列引擎。每当有新数据写入流表时,引擎会自动计算每10秒的平均温度、最高温度和最低温度,实现实时监控。
6.3 高效的历史数据查询
工业场景需要频繁查询历史数据进行趋势分析:
python
# 查询最近24小时的温度趋势
result = session.run('''
t = loadTable("dfs://iot_demo", "sensor_data")
select avg(temperature) as avg_temp
from t
where timestamp between now() - 24*60*60*1000 and now()
group by bar(timestamp, 1h) as hour
order by hour
''')
6.4 丰富的时序函数
DolphinDB内置大量时序处理函数:
| 函数类别 | 函数示例 | 用途 |
|---|---|---|
| 时间窗口 | bar, dailyAlignedBar |
时间对齐 |
| 滑动窗口 | msum, mavg, mmax |
滑动计算 |
| 累计计算 | cumsum, cumavg, cummax |
累计统计 |
| 重采样 | resample |
数据降采样 |
| 填充 | ffill, bfill, interpolate |
缺失值填充 |
| 时间转换 | temporalParse, formatDateTime |
时间格式化 |
七、DolphinDB学习路线图
7.1 入门阶段(1-2周)
| 学习内容 | 时间 | 目标 |
|---|---|---|
| 基础概念 | 2天 | 理解时序数据库原理 |
| 环境搭建 | 1天 | 完成单机部署 |
| 基础语法 | 3天 | 掌握SQL查询和脚本 |
| 数据导入导出 | 2天 | 学会数据迁移 |
7.2 进阶阶段(2-4周)
| 学习内容 | 时间 | 目标 |
|---|---|---|
| 分区策略 | 3天 | 掌握分区设计 |
| 分布式表 | 3天 | 学会分布式存储 |
| 流计算 | 5天 | 掌握实时计算 |
| 性能优化 | 4天 | 提升查询性能 |
7.3 实战阶段(1-2月)
| 学习内容 | 时间 | 目标 |
|---|---|---|
| 工业物联网项目 | 2周 | 完成设备监控项目 |
| 数据分析项目 | 2周 | 完成能耗分析项目 |
| 架构设计 | 1周 | 掌握集群架构 |
入门阶段 第1周 基础概念与环境搭建 第2周 基础语法与数据操作 进阶阶段 第3周 分区策略与分布式表 第4周 流计算与性能优化 实战阶段 第5-6周 工业物联网项目实战 第7-8周 架构设计与最佳实践 DolphinDB学习路线图
八、总结
本文作为DolphinDB工业物联网实战系列的开篇,系统介绍了时序数据库的核心概念和DolphinDB的独特优势。核心要点如下:
- 时序数据库的必要性:传统数据库无法满足物联网场景的高频写入、海量存储、实时计算需求
- DolphinDB的核心优势:千万级写入QPS、强大的计算能力、灵活的存储策略、丰富的数据接口
- 工业物联网应用:设备监控、能耗管理、质量控制、预测性维护等场景
- 架构设计:控制节点、数据节点、代理节点的协作机制
- 快速上手:通过Python API完成数据插入、查询、流计算等操作
思考题:
- 在你的业务场景中,时序数据的主要来源是什么?数据量级如何?
- 相比InfluxDB和TimescaleDB,DolphinDB的哪些特性最吸引你?
- 如果要设计一个设备监控系统,你会如何规划数据存储和计算架构?