OPS 国产/国内生态时序数据库选型验证
1. 文档目标
本文用于记录 P1 时序数据库选型验证和最终决策。OPS 第 1 阶段指标样本、探测样本、接口流量和采集健康度采用 TDengine 开源版作为时序数据存储底座。
本文不是商业采购建议。TDengine 开源版无时间使用限制,但采用 AGPL-3.0 许可证;最终部署版本、AGPL 合规、麒麟兼容性和是否需要企业版支持仍需在现场确认。
2. 选型约束
| 约束 |
要求 |
| 部署环境 |
必须支持 Linux/麒麟验收环境,优先支持 x86_64 和 ARM64。 |
| 后端语言 |
必须提供 Go 后端可用连接方式。 |
| 写入能力 |
支持批量写入高频指标样本。 |
| 查询能力 |
支持时间范围查询、聚合、降采样或等效能力。 |
| 保留策略 |
支持数据保留周期或 TTL。 |
| 运维 |
具备备份恢复、权限控制、日志和基础监控能力。 |
| 风险 |
TDengine 开源版的 AGPL 合规、国产化适配、社区活跃度和长期维护风险可评估。 |
3. 官方资料依据
4. 候选产品验证
4.1 TDengine
| 项目 |
验证结论 |
| Linux/麒麟 |
官方平台矩阵覆盖 Galaxy Kirin V10、NeoKylin 等,但部分能力标注与企业版相关,需确认 OSS/企业版边界。 |
| CPU 架构 |
服务端和连接器支持 x64、ARM64;Go 连接器覆盖 Linux、Windows、macOS。 |
| Go 连接 |
官方 Go 驱动实现 database/sql;建议采用 WebSocket 连接路径。 |
| 批量写入 |
支持 SQL 和 schemaless 写入,适合指标样本。 |
| 查询 |
支持时间范围查询和聚合查询。 |
| 保留策略 |
支持 TTL 或库表级保留策略,需在样例库验证。 |
| 风险 |
Go 原生连接和 REST 连接计划停用,首期必须避免新代码依赖将废弃路径。 |
4.2 Apache IoTDB
| 项目 |
验证结论 |
| Linux/麒麟 |
Apache 项目,需在目标麒麟版本实测安装、服务管理和性能。 |
| CPU 架构 |
需按现场系统包和 JVM 环境确认。 |
| Go 连接 |
Go Native API 提供 SessionPool,并建议多线程场景使用连接池。 |
| 批量写入 |
提供 InsertTablet、InsertRecords、InsertTablets 等批量写入接口。 |
| 查询 |
提供原始数据查询、聚合查询、SQL 查询等接口。 |
| 保留策略 |
支持 TTL 方向,需结合版本验证。 |
| 风险 |
设备树模型适合设备数据,但 OPS 的资源、指标、标签模型需要设计映射规则。 |
4.3 openGemini
| 项目 |
验证结论 |
| Linux/麒麟 |
官方文档列出主流 Linux、openEuler 等支持;麒麟需实测。 |
| CPU 架构 |
官方快速开始列出 x86-64 和 ARM-64 支持。 |
| Go 连接 |
内核使用 Go,生态接近 InfluxDB 协议;OPS 需验证 Go 客户端选型。 |
| 批量写入 |
支持 line protocol 风格写入,适合指标。 |
| 查询 |
支持类 InfluxQL 查询,适合时间范围和聚合。 |
| 保留策略 |
支持数据库、保留策略方向,需在版本中验证配置项。 |
| 风险 |
相比 TDengine 和 IoTDB,项目成熟度、企业支持和麒麟适配需要更谨慎验证。 |
5. 评分矩阵
分数为当前文档验证分,不替代现场压测。
| 维度 |
权重 |
TDengine |
Apache IoTDB |
openGemini |
| Linux/麒麟适配 |
20 |
18 |
14 |
14 |
| Go 接入成熟度 |
15 |
14 |
13 |
10 |
| 批量写入 |
15 |
14 |
13 |
12 |
| 范围查询与聚合 |
15 |
14 |
14 |
12 |
| 保留策略/降采样 |
10 |
8 |
8 |
8 |
| 运维和备份恢复 |
10 |
8 |
8 |
7 |
| 授权和交付风险 |
10 |
7 |
9 |
8 |
| 团队学习成本 |
5 |
4 |
3 |
4 |
| 总分 |
100 |
87 |
82 |
75 |
6. 选型结论
第 1 阶段已决策采用 TDengine 开源版。Apache IoTDB 和 openGemini 不作为首期实现目标,仅保留为后续替换或风险备选。
理由:
- TDengine 对 Linux、麒麟和多 CPU 架构的官方说明最贴近当前验收约束。
- TDengine Go 驱动与
database/sql 兼容,接入成本较低。
- Apache IoTDB 的设备树模型适合设备时序数据,但 OPS 需要额外设计资源和标签映射。
- openGemini 适合可观测性指标场景,但首期交付要降低成熟度和现场适配风险。
TDengine 开源版使用边界:
| 项目 |
结论 |
| 使用期限 |
开源版无固定到期时间;不是试用版授权。 |
| 许可证 |
AGPL-3.0,需要进行开源合规确认。 |
| 商业支持 |
若院方要求原厂支持、国产系统认证或企业特性,需要另行评估企业版或商业支持。 |
| 技术路线 |
后端优先使用 TDengine Go WebSocket 连接路径,避免依赖官方已标记未来停用的原生或 REST 路径。 |
| 部署验证 |
必须在目标 Linux/麒麟版本上完成安装、写入、查询、保留策略、备份恢复和故障降级验证。 |
首期实现仍必须通过时序库适配层隔离 TDengine,避免业务逻辑直接依赖 TDengine SQL 方言,保留后续替换空间。
7. 适配层接口
后端建议定义最小接口:
| 方法 |
输入 |
输出 |
说明 |
WriteSamples |
样本数组 |
写入结果 |
支持批量写入。 |
QueryRange |
资源、指标、时间范围、标签 |
样本序列 |
用于资源详情趋势图。 |
QueryAggregate |
资源、指标、时间范围、聚合窗口 |
聚合序列 |
用于报表和大屏。 |
CheckHealth |
无 |
健康状态 |
用于部署烟测和自监控。 |
EnsureRetention |
保留策略配置 |
执行结果 |
初始化或校验保留策略。 |
业务代码只依赖适配层,不直接拼接 TDengine 专有查询。
8. 验证计划
| 步骤 |
验证内容 |
通过标准 |
| 1 |
在目标 Linux/麒麟环境安装 TDengine 开源版 |
服务可启动,端口和日志正常。 |
| 2 |
后端使用 Go 写入 10 万条样本 |
无明显错误,写入耗时可记录。 |
| 3 |
按 resource_id + metric_code + 时间范围 查询 |
返回正确序列,能映射回资源。 |
| 4 |
执行 1 分钟、5 分钟、1 小时聚合 |
聚合结果正确。 |
| 5 |
配置保留策略或 TTL |
过期策略可查询和验证。 |
| 6 |
执行备份恢复演练 |
恢复后样本可查。 |
| 7 |
权限验证 |
只读账号不能写入,写入账号不能管理系统配置。 |
| 8 |
故障验证 |
时序库不可用时,后端返回局部失败并记录 traceId。 |
9. 验收影响
| 功能 |
依赖时序库 |
降级策略 |
| 资源详情趋势图 |
是 |
基本信息可见,趋势区显示局部错误。 |
| 首页资源健康 |
部分依赖 |
显示最近成功采集时间和数据过期提示。 |
| 告警阈值 |
是 |
采集失败转内部事件,不伪造阈值结果。 |
| 报表 |
是 |
异步失败可重试,保留失败原因。 |
| 大屏 |
是 |
单组件失败不影响整屏。 |
10. 未决项
| 未决项 |
当前处理 |
| AGPL 合规 |
需要项目、院方或法务确认开源版使用方式是否满足 AGPL-3.0 要求。 |
| 企业版需求 |
若验收要求原厂支持、认证或企业特性,需要商务和现场运维确认。 |
| 麒麟具体版本 |
验收环境确定后实测。 |
| 高可用部署 |
第 1 阶段可先单节点或小集群验证,正式上线前补 HA 方案。 |
| 压测指标 |
server/ 初始化后补写入吞吐、查询 p95/p99 和资源占用基线。 |