时序数据库(Time Series Database,TSDB)是一种专为存储、管理和查询时间序列数据而设计的数据库系统。时间序列数据具有以下特征:
这类数据库广泛应用于物联网(IoT)、智能制造、智慧城市、车联网、金融风控、网络监控等领域。随着大数据时代的到来,如何高效地处理和分析海量时间序列数据,成为企业面临的重要课题。
在选择时序数据库时,企业通常会从以下几个维度进行评估:
Apache IoTDB 是一款专为物联网(IoT)和工业互联网场景设计的高效、轻量级时序数据库。它由清华大学自主研发,并于2020年捐赠给Apache软件基金会,成为Apache顶级项目。IoTDB具备高性能写入、高压缩比、实时查询、分布式架构等特性,广泛应用于工业监控、智能制造、智慧城市、车联网等领域。[具体可以去官网了解Apache IoTDB_国产开源时序数据库_时序数据管理服务商-天谋科技Timecho]
在开始之前,请确保系统满足以下要求:
打开终端或命令提示符,输入以下命令检查 Java 版本:
java -version
如果未安装 Java 或版本不符合要求,请先安装合适的 JDK 版本。
访问 发行版本 | 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 安装目录下的 sbin
文件夹,启动 IoTDB 服务:
cd /opt/iotdb/apache-iotdb-2.5.0-all-bin/sbin
./start-server.sh
默认情况下,IoTDB 将监听 6667
端口。如果你需要更改端口号或其他配置项,可以编辑 conf/iotdb-engine.properties
文件。
启动成功后,可以使用 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 时,可以通过以下命令停止服务:
cd /opt/iotdb/apache-iotdb-2.5.0-all-bin/sbin
./stop-server.sh
优势分析
特性 | 描述 |
---|---|
完全自主可控 | 从底层数据文件到分布式架构均不依赖第三方系统,确保系统的安全性和稳定性。 |
持续创新 | 作为 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 在以下方面具有显著优势:
这些特性使 IoTDB 能够满足物联网和工业互联网场景下的高性能、高可靠性和高扩展性需求。
随着国家对信息技术自主可控的要求日益提高,推动了国内企业向使用国产软件和硬件解决方案转变的趋势。政府出台了一系列政策鼓励和支持国产化替代,尤其是在关键基础设施领域如能源、电力、交通等行业。这些政策不仅促进了技术的自主创新,还提高了信息安全水平,减少了对外部供应商的依赖。
Apache 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 凭借其高性能、易用性、分布式能力与活跃的社区生态,正在成为越来越多企业时序数据库选型的首选。