DolphinDB入门:时序数据库的正确打开方式

目录

    • 摘要
    • 一、时序数据库:数据洪流时代的必然选择
      • [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的独特优势。核心要点如下:

  1. 时序数据库的必要性:传统数据库无法满足物联网场景的高频写入、海量存储、实时计算需求
  2. DolphinDB的核心优势:千万级写入QPS、强大的计算能力、灵活的存储策略、丰富的数据接口
  3. 工业物联网应用:设备监控、能耗管理、质量控制、预测性维护等场景
  4. 架构设计:控制节点、数据节点、代理节点的协作机制
  5. 快速上手:通过Python API完成数据插入、查询、流计算等操作

思考题

  1. 在你的业务场景中,时序数据的主要来源是什么?数据量级如何?
  2. 相比InfluxDB和TimescaleDB,DolphinDB的哪些特性最吸引你?
  3. 如果要设计一个设备监控系统,你会如何规划数据存储和计算架构?

参考资料

相关推荐
数厘1 小时前
2.4MySQL安装配置指南(电商数据分析专用)
数据库·mysql·数据分析
一只小白0001 小时前
数据库对象实例化流程模板 + 常见错误
数据库
一江寒逸2 小时前
零基础从入门到精通MySQL(下篇):精通篇——吃透索引底层、锁机制与性能优化,成为MySQL实战高手
数据库·mysql·性能优化
DevOpenClub2 小时前
全国三甲医院主体信息 API 接口
java·大数据·数据库
一勺菠萝丶2 小时前
管理后台使用手册在线预览与首次登录引导弹窗实现
java·前端·数据库
无忧智库2 小时前
某大型银行“十五五”金融大模型风控与智能投顾平台建设方案深度解读(WORD)
数据库·金融
爱码小白2 小时前
数据库多表命名的通用规范
数据库·python·mysql
huohuopro2 小时前
Hbase伪分布式远程访问配置
数据库·分布式·hbase
XDHCOM2 小时前
ORA-12169: TNS连接标识符过长,Oracle报错故障修复与远程处理
数据库·oracle