当OT遇见IT:Apache IoTDB如何用“时序空间一体化“技术破解工业物联网数据孤岛困局?
目录
一. 什么是时序数据库?
二. 时序数据库的选型要素
性能指标
架构能力
数据模型与查询能力
安全与权限控制
部署与运维能力
三· Apache IoTDB 简介及安装使用:
安装准备教程
检查 Java 版本
下载与安装
下载 IoTDB
解压文件
配置环境变量
启动 IoTDB
启动服务器
使用 CLI 工具连接数据库
入门使用:
用户管理与权限控制
数据加密与传输安全
备份与恢复
运维安全
基本使用
创建时间序列
插入数据
查询数据
聚合查询
停止 IoTDB 服务
四.Apache IoTDB优势效果剖析:
独立自研
商业友好
时序数据标准文件格式
双时序模型
千万级数据写入
毫秒级查询响应
五.IoTDB 在国产化替代中的优势
国产数据库替代的背景与政策支持
政策
IoTDB 的国产化适配能力(麒麟、统信、龙芯等)
与国外 TSDB 的对比:技术自主可控
政府、能源、电力、交通等行业的落地
六.总结
时序数据库选型的五大核心建议
IoTDB 的技术优势与生态竞争力
国产时序数据库的未来
企业如何构建自主可控的时序数据平台
一. 什么是时序数据库?
时序数据库(Time Series Database,TSDB)是一种专为存储、管理和查询时间序列数据而设计的数据库系统。时间序列数据具有以下特征:
- 每条数据都带有时间戳;
- 数据写入频率极高;
- 数据通常不可变;
- 查询以聚合分析为主;
- 数据量庞大,需要高效压缩。
这类数据库广泛应用于物联网(IoT)、智能制造、智慧城市、车联网、金融风控、网络监控等领域。随着大数据时代的到来,如何高效地处理和分析海量时间序列数据,成为企业面临的重要课题。
二. 时序数据库的选型要素
在选择时序数据库时,企业通常会从以下几个维度进行评估:
性能指标
- 写入性能:能否支持高并发写入,每秒写入多少条数据;
- 查询性能:聚合查询、范围查询、多维查询的速度;
- 压缩比:数据压缩效率,节省存储空间;
- 吞吐量:整体系统吞吐能力。
架构能力
- 分布式支持:是否支持多节点集群部署;
- 高可用性:是否支持故障转移、数据副本;
- 扩展性:是否支持横向扩展,弹性扩容;
- 云原生兼容性:是否支持 Docker、Kubernetes 等云平台。
数据模型与查询能力
- 数据模型:是否支持设备层级、时间序列、对齐机制;
- SQL 支持:是否支持标准 SQL 或类 SQL 查询语言;
- 聚合函数:是否支持 AVG、SUM、MAX、MIN 等常用聚合函数;
- 插件机制:是否支持 UDF、自定义压缩算法、索引等扩展功能。
安全与权限控制
- 用户管理:是否支持多用户、角色管理;
- 权限控制:是否支持细粒度的权限控制;
- 审计日志:是否记录操作日志用于审计;
- 加密机制:是否支持 SSL、数据加密传输与存储。
部署与运维能力
- 部署模式:是否支持单机、伪集群、多节点集群;
- 监控支持:是否提供 Prometheus、Grafana 等监控集成;
- 日志管理:日志结构是否清晰,是否支持日志归档;
- 备份与恢复:是否提供数据备份与恢复工具。
三· Apache IoTDB 简介及安装使用:
Apache IoTDB 是一款专为物联网(IoT)和工业互联网场景设计的高效、轻量级时序数据库。它由清华大学自主研发,并于2020年捐赠给Apache软件基金会,成为Apache顶级项目。IoTDB具备高性能写入、高压缩比、实时查询、分布式架构等特性,广泛应用于工业监控、智能制造、智慧城市、车联网等领域。[具体可以去官网了解Apache IoTDB_国产开源时序数据库_时序数据管理服务商-天谋科技Timecho]
安装准备教程
在开始之前,请确保系统满足以下要求:
- 操作系统:Linux、macOS 或 Windows
- Java 环境:JDK 8 或更高版本(推荐使用 JDK 11)
- 内存:至少 2GB RAM
- 磁盘空间:至少 100MB 可用磁盘空间
检查 Java 版本
打开终端或命令提示符,输入以下命令检查 Java 版本:
java -version
如果未安装 Java 或版本不符合要求,请先安装合适的 JDK 版本。
下载与安装
下载 IoTDB
访问 发行版本 | IoTDB Website,选择适合你操作系统的最新稳定版进行下载。
对于 Linux 和 macOS 用户,可以使用 wget
命令直接下载:
wget https://downloads.apache.org/iotdb/2.5.0/apache-iotdb-2.5.0-all-bin.zip
解压文件
下载完成后,解压文件到指定目录。例如,在 Linux 或 macOS 上可以使用以下命令:
unzip apache-iotdb-2.5.0-all-bin.zip -d /opt/iotdb
Windows 用户可以通过右键点击 .zip
文件并选择“解压到当前文件夹”来解压缩。
配置环境变量
为了方便使用,你可以将 IoTDB 的 bin 目录添加到系统的 PATH 环境变量中。编辑 ~/.bashrc
或 ~/.zshrc
文件(根据你的 shell),添加以下内容:
export IOTDB_HOME=/opt/iotdb/apache-iotdb-2.5.0-all-bin
export PATH=$PATH:$IOTDB_HOME/sbin:$IOTDB_HOME/bin
然后执行以下命令使配置生效:
source ~/.bashrc
启动 IoTDB
启动服务器
进入 IoTDB 安装目录下的 sbin
文件夹,启动 IoTDB 服务:
cd /opt/iotdb/apache-iotdb-2.5.0-all-bin/sbin
./start-server.sh
默认情况下,IoTDB 将监听 6667
端口。如果你需要更改端口号或其他配置项,可以编辑 conf/iotdb-engine.properties
文件。
使用 CLI 工具连接数据库
启动成功后,可以使用 IoTDB 提供的命令行工具(CLI)连接数据库:
cd /opt/iotdb/apache-iotdb-2.5.0-all-bin/sbin
./start-cli.sh -h 127.0.0.1 -p 6667 -u root -pw root
这将打开一个交互式的 CLI 界面,允许你执行 SQL 查询和管理任务。
入门使用:
用户管理与权限控制
创建用户
默认情况下,IoTDB 提供了一个 root
用户,但为了安全起见,建议创建新的用户并限制其权限。
-- 使用 root 用户登录
./sbin/start-cli.sh -h 127.0.0.1 -p 6667 -u root -pw root-- 创建新用户
CREATE USER 'newuser' 'newpassword';-- 查看所有用户
SHOW USERS;
授予权限
你可以为不同的用户分配不同的权限,以控制他们对数据库的操作范围。
-- 授予读取权限
GRANT READ ON root.ln.wf01 TO 'newuser';-- 授予写入权限
GRANT WRITE ON root.ln.wf01 TO 'newuser';-- 授予管理员权限
GRANT ADMIN TO 'newuser';
修改密码
定期修改密码是保持系统安全的重要步骤。
-- 修改密码
ALTER USER 'newuser' SET PASSWORD 'newpassword';
删除用户
如果某个用户不再需要访问数据库,可以将其删除。
-- 删除用户
DROP USER 'newuser';
数据加密与传输安全
启用 SSL/TLS 加密
为了确保数据在网络传输过程中的安全性,可以启用 SSL/TLS 加密。
生成证书
首先,你需要生成一个自签名证书或使用现有的证书。
# 生成私钥
openssl genrsa -out server.key 2048# 生成证书签名请求 (CSR)
openssl req -new -key server.key -out server.csr# 生成自签名证书
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
配置 IoTDB 使用 SSL
编辑 iotdb-engine.properties
文件,添加以下配置:
# 启用 SSL
enable_ssl=true# 指定证书和私钥路径
ssl_key_file=/path/to/server.key
ssl_cert_file=/path/to/server.crt
测试连接
使用命令行工具测试是否能够通过 SSL 连接。
./sbin/start-cli.sh -h 127.0.0.1 -p 6667 -u root -pw root --use-ssl
数据库审计日志
IoTDB 支持记录操作日志,便于后续审计和故障排查。
开启审计日志
编辑 iotdb-engine.properties
文件,添加以下配置:
# 开启审计日志
enable_audit_log=true# 设置审计日志文件路径
audit_log_dir=/path/to/audit/logs
查看审计日志
审计日志会记录每个用户的操作,包括查询、插入、删除等操作:
cat /path/to/audit/logs/audit.log
备份与恢复
数据备份
定期备份数据是保障数据安全的重要手段。IoTDB 提供了简单的备份命令。
# 备份当前数据库
./sbin/backup.sh -d /path/to/backup/dir
数据恢复
当发生数据丢失或损坏时,可以通过备份文件进行恢复。
# 恢复数据库
./sbin/restore.sh -d /path/to/backup/dir
运维安全
定期更新
确保你使用的 IoTDB 版本是最新的,及时应用安全补丁和更新。
# 检查当前版本
./sbin/start-cli.sh -h 127.0.0.1 -p 6667 -u root -pw root -e "SHOW VERSION;"# 下载最新版本
wget https://iotdb.apache.org/zh/Download/
监控与告警
设置监控和告警机制,以便在出现异常情况时及时响应。
# 使用 Prometheus 和 Grafana 监控 IoTDB
# 配置 Prometheus 抓取 IoTDB 指标
scrape_configs:- job_name: 'iotdb'static_configs:- targets: ['localhost:6667']
访问控制
限制对 IoTDB 的访问,仅允许可信的 IP 地址或网络段访问数据库。
# 在 iotdb-engine.properties 中配置白名单
whitelist=192.168.1.0/24,127.0.0.1
基本使用
创建时间序列
首先创建一个新的时间序列:
CREATE TIMESERIES root.ln.wf01.wt01.status WITH DATATYPE=BOOLEAN, ENCODING=PLAIN;
CREATE TIMESERIES root.ln.wf01.wt01.temperature WITH DATATYPE=FLOAT, ENCODING=RLE;
插入数据
插入一些示例数据:
INSERT INTO root.ln.wf01.wt01(timestamp,status,temperature) values(1,true,25.96);
INSERT INTO root.ln.wf01.wt01(timestamp,status,temperature) values(2,false,24.3);
INSERT INTO root.ln.wf01.wt01(timestamp,status,temperature) values(3,true,26.1);
查询数据
查询已插入的数据:
SELECT * FROM root.ln.wf01.wt01 WHERE time >= 1 AND time <= 3;
输出结果类似于:
+-----------------------------+------------------------+-------------------------+
| Time|root.ln.wf01.wt01.status|root.ln.wf01.wt01.temperature|
+-----------------------------+------------------------+-------------------------+
|1970-01-01T08:00:00.001+08:00| true| 25.96|
|1970-01-01T08:00:00.002+08:00| false| 24.3|
|1970-01-01T08:00:00.003+08:00| true| 26.1|
+-----------------------------+------------------------+-------------------------+
聚合查询
执行聚合查询,如计算平均温度:
SELECT AVG(temperature) FROM root.ln.wf01.wt01 WHERE time >= 1 AND time <= 3;
输出结果类似于:
+-----------------------------+-------------------------+
| Time|AVG(root.ln.wf01.wt01.temperature)|
+-----------------------------+-------------------------+
| null| 25.453333333333334|
+-----------------------------+-------------------------+
停止 IoTDB 服务
当你不再需要运行 IoTDB 时,可以通过以下命令停止服务:
cd /opt/iotdb/apache-iotdb-2.5.0-all-bin/sbin
./stop-server.sh
四.Apache IoTDB优势效果剖析:
独立自研
优势分析
特性 | 描述 |
---|---|
完全自主可控 | 从底层数据文件到分布式架构均不依赖第三方系统,确保系统的安全性和稳定性。 |
持续创新 | 作为 Apache 基金会唯一的时序数据库 Top-Level 项目,IoTDB 可以持续进行技术创新和功能迭代。 |
示例:创建时间序列并插入数据
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;public class IoTDBExample {public static void main(String[] args) throws Exception {// 建立连接Connection connection = DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");Statement statement = connection.createStatement();// 创建时间序列statement.execute("CREATE TIMESERIES root.ln.wf01.wt01.temperature WITH DATATYPE=FLOAT, ENCODING=RLE");// 插入数据statement.execute("INSERT INTO root.ln.wf01.wt01(timestamp, temperature) VALUES (now(), 25.3)");// 关闭连接connection.close();}
}
商业友好
优势分析
特性 | 描述 |
---|---|
开源协议稳定 | 遵循 Apache 2.0 协议,允许企业修改、使用项目代码用于商业化应用,无需担心变更。 |
社区支持 | 拥有活跃的开源社区,提供丰富的文档和资源支持。 |
示例:批量插入数据
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;public class IoTDBBatchInsertExample {public static void main(String[] args) throws Exception {// 建立连接Connection connection = DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO root.ln.wf01.wt01(timestamp, temperature) VALUES (?, ?)");// 批量插入数据for (int i = 0; i < 1000000; i++) {preparedStatement.setLong(1, System.currentTimeMillis());preparedStatement.setFloat(2, 25.3f + i * 0.1f);preparedStatement.addBatch();}// 执行批处理preparedStatement.executeBatch();// 关闭连接connection.close();}
}
时序数据标准文件格式
优势分析
特性 | 描述 |
---|---|
高效存储 | 采用 TsFile 格式,相比通用文件格式,写入/查询吞吐、压缩比可提升 3-15 倍。 |
降低成本 | 显著降低存储成本,并实现在线、离线数据高效流转。 |
示例:查询数据
-- 查询数据
SELECT * FROM root.ln.wf01.wt01 WHERE time >= 1 AND time <= 3;
TsFile 数据流转过程
双时序模型
优势分析
特性 | 描述 |
---|---|
灵活架构 | 树、表双模型支持,适配工业监控场景与设备管理场景。 |
高效分析 | 架构灵活性与分析效率双保障,方便用户根据需求选择合适的模型。 |
示例:创建树模型与表模型时间序列
-- 创建树模型时间序列
CREATE TIMESERIES root.device.sensor1.temperature WITH DATATYPE=FLOAT, ENCODING=RLE;-- 创建表模型时间序列
CREATE TABLE root.device.sensor1 (time TIMESTAMP, temperature FLOAT);
双时序模型对比
模型 | 特点 |
---|---|
树模型 | 适合复杂层级结构的数据存储,便于多维度查询。 |
表模型 | 适合扁平化数据存储,便于高效批量操作。 |
千万级数据写入
优势分析
特性 | 描述 |
---|---|
高频数据接入 | 采用列式写入模式,实现高频数据毫秒级接入。 |
乱序数据处理 | 首创乱序分离存储引擎,轻松应对海量数据高并发写入需求。 |
示例:批量插入数据
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;public class IoTDBHighFrequencyInsertExample {public static void main(String[] args) throws Exception {// 建立连接Connection connection = DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO root.ln.wf01.wt01(timestamp, temperature) VALUES (?, ?)");// 批量插入数据for (int i = 0; i < 1000000; i++) {preparedStatement.setLong(1, System.currentTimeMillis());preparedStatement.setFloat(2, 25.3f + i * 0.1f);preparedStatement.addBatch();}// 执行批处理preparedStatement.executeBatch();// 关闭连接connection.close();}
}
毫秒级查询响应
优势分析
特性 | 描述 |
---|---|
高效索引机制 | 通过高效的索引机制和查询优化,大幅提升数据查询效率。 |
内置 UDF 函数 | 支持降采样查询、时序分段查询、数据补齐与修复等操作,内置超 70 种 UDF 函数帮助分析。 |
示例:使用 UDF 函数进行数据分析
-- 使用 UDF 函数进行数据分析
SELECT AVG(temperature), MIN(temperature), MAX(temperature)
FROM root.ln.wf01.wt01
WHERE time >= '2023-01-01T00:00:00' AND time <= '2023-01-01T23:59:59';
UDF 函数分类
类别 | 描述 |
---|---|
降采样 | 将高频率数据降为低频率,便于展示和分析。 |
分段查询 | 按时间段分割数据,便于特定时间段内的分析。 |
数据补齐 | 自动填补缺失数据,保证数据完整性。 |
数据修复 | 对异常数据进行修复,提高数据质量。 |
综上,Apache IoTDB 在以下方面具有显著优势:
- 独立自研:完全自主可控,持续创新。
- 商业友好:遵循 Apache 2.0 协议,拥有活跃的开源社区。
- 时序数据标准文件格式:采用 TsFile 格式,提升写入/查询性能,降低成本。
- 双时序模型:灵活架构,适配多种应用场景。
- 千万级数据写入:支持高频数据接入和乱序数据处理。
- 毫秒级查询响应:高效索引机制和内置 UDF 函数,大幅提升查询效率。
这些特性使 IoTDB 能够满足物联网和工业互联网场景下的高性能、高可靠性和高扩展性需求。
五.IoTDB 在国产化替代中的优势
国产数据库替代的背景与政策支持
随着国家对信息技术自主可控的要求日益提高,推动了国内企业向使用国产软件和硬件解决方案转变的趋势。政府出台了一系列政策鼓励和支持国产化替代,尤其是在关键基础设施领域如能源、电力、交通等行业。这些政策不仅促进了技术的自主创新,还提高了信息安全水平,减少了对外部供应商的依赖。
政策
- 信创战略:中国信息创新(信创)战略旨在促进信息技术领域的自主创新,减少对国外技术和产品的依赖。
- 数据安全法:《中华人民共和国数据安全法》强调了数据安全的重要性,并要求重要数据处理者采取措施确保数据的安全性和保密性。
IoTDB 的国产化适配能力(麒麟、统信、龙芯等)
Apache IoTDB 作为一款由清华大学自主研发的时序数据库,已经实现了广泛的国产化适配,包括但不限于:
- 操作系统:兼容麒麟、统信等国产操作系统。
- 芯片架构:支持龙芯、鲲鹏等多种国产处理器架构。
- 中间件:能够与众多国产中间件无缝集成,满足不同场景下的需求。
通过这些适配工作,IoTDB 不仅在性能上达到了国际先进水平,而且在安全性、稳定性方面也表现卓越,为用户提供了一个可靠的选择。
与国外 TSDB 的对比:技术自主可控
相较于国外同类产品,IoTDB 具有以下显著优势:
- 完全自主可控:从底层文件格式到分布式架构均由国内团队研发,避免了因外部制裁或技术支持中断带来的风险。
- 快速响应本地需求:由于团队位于国内,可以更迅速地响应客户需求并提供定制化服务。
- 社区活跃度高:拥有一个活跃的开源社区,用户可以通过 GitHub、邮件列表等方式获取帮助和支持。
政府、能源、电力、交通等行业的落地
IoTDB 已经在多个行业得到了成功应用,如:
- 政府:某市政府利用 IoTDB 构建智慧城市平台,实现了城市运行状态的实时监测与分析。
- 能源:中国核电集团采用 IoTDB 管理核电厂设备的健康状况,提升了运维效率。
- 电力:南方电网部署 IoTDB 用于智能电表数据管理,降低了运营成本。
- 交通:北京地铁公司借助 IoTDB 实现列车状态监控及故障预警系统,增强了行车安全。
六.总结
时序数据库选型的五大核心建议
- 性能考量:关注写入速度、查询延迟及压缩率等指标。
- 扩展性与灵活性:选择支持分布式架构的产品,以适应未来增长。
- 安全性保障:确保所选产品具备强大的安全防护机制。
- 易用性与维护成本:考虑学习曲线、文档质量及社区活跃程度。
- 生态兼容性:检查是否能与其他主流框架和技术栈良好集成。
IoTDB 的技术优势与生态竞争力
IoTDB 凭借其高性能写入、高压缩比、分布式架构、丰富的插件体系以及强大的社区支持,在国内外市场上展现了强劲的竞争实力。特别是在大数据处理、物联网等领域,IoTDB 能够提供一站式解决方案,帮助企业高效管理海量时序数据。
IoTDB 的核心优势
优势 | 描述 |
---|---|
高性能写入 | 支持高并发写入,适合物联网场景 |
高压缩比 | 支持多种编码压缩算法,压缩率高达90%以上 |
分布式架构 | 支持多节点部署,适合大规模数据 |
丰富插件体系 | 支持Grafana、Flink、Spark 等生态 |
国产适配强 | 完美兼容麒麟、统信、龙芯、鲲鹏等国产软硬件 |
IoTDB 示例
1. 添加 Maven 依赖(Java 客户端)
<dependency><groupId>org.apache.iotdb</groupId><artifactId>iotdb-session</artifactId><version>1.3.0</version>
</dependency>
2. Java 连接并操作 IoTDB
import org.apache.iotdb.session.Session;
import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;import java.util.ArrayList;
import java.util.List;public class IoTDBExample {public static void main(String[] args) throws Exception {// 建立连接Session session = new Session("127.0.0.1", 6667, "root", "root");session.open();// 创建数据库session.executeNonQueryStatement("CREATE DATABASE IF NOT EXISTS root.vehicle");// 创建时间序列List<MeasurementSchema> schemaList = new ArrayList<>();schemaList.add(new MeasurementSchema("speed", TSDataType.INT32, TSEncoding.RLE, CompressionType.SNAPPY));schemaList.add(new MeasurementSchema("temperature", TSDataType.FLOAT, TSEncoding.PLAIN, CompressionType.SNAPPY));session.createTimeseries("root.vehicle.car01", schemaList);// 插入数据session.insertRecord("root.vehicle.car01", 1717027200000L, new Object[]{120, 25.5f});session.insertRecord("root.vehicle.car01", 1717027260000L, new Object[]{130, 26.0f});// 查询数据String sql = "SELECT * FROM root.vehicle.car01";var dataset = session.executeQueryStatement(sql);while (dataset.hasNext()) {System.out.println(dataset.next());}// 关闭连接session.close();}
}
3. 查询结果示例
1717027200000, root.vehicle.car01.speed=120
1717027200000, root.vehicle.car01.temperature=25.5
1717027260000, root.vehicle.car01.speed=130
1717027260000, root.vehicle.car01.temperature=26.0
IoTDB 与国产软硬件适配
类别 | 适配情况 |
---|---|
操作系统 | 麒麟、统信 UOS |
芯片架构 | 龙芯、鲲鹏、飞腾 |
中间件 | 达梦、东方通、金蝶中间件 |
云平台 | 阿里云、华为云、腾讯云 |
国产时序数据库的未来
随着国家对自主可控技术的重视以及市场需求的增长,预计未来几年内,国产时序数据库将迎来快速发展期。一方面,技术创新将持续提升产品的性能和可靠性;另一方面,通过加强国际合作,将进一步扩大市场影响力。
企业如何构建自主可控的时序数据平台
为了构建一个自主可控的时序数据平台,企业应遵循以下原则:
- 选用国产化软件:优先考虑经过充分验证的国产软件产品。
- 注重数据安全:建立健全的数据保护制度,定期开展安全审计。
- 强化人员培训:培养一支熟悉国产技术的专业团队,增强内部技术支持能力。
如需要了解 IoTDB更多请自行查看:
- 官方网站:Apache IoTDB_国产开源时序数据库_时序数据管理服务商-天谋科技Timecho
- 下载页面:发行版本 | IoTDB Website
在国产化替代与大数据架构升级的双重驱动下,Apache IoTDB 凭借其高性能、易用性、分布式能力与活跃的社区生态,正在成为越来越多企业时序数据库选型的首选。