# OPS 国产/国内生态时序数据库选型验证

## 1. 文档目标

本文用于记录 P1 时序数据库选型验证和最终决策。OPS 第 1 阶段指标样本、探测样本、接口流量和采集健康度采用 TDengine 开源版作为时序数据存储底座。

本文不是商业采购建议。TDengine 开源版无时间使用限制，但采用 AGPL-3.0 许可证；最终部署版本、AGPL 合规、麒麟兼容性和是否需要企业版支持仍需在现场确认。

## 2. 选型约束

| 约束 | 要求 |
| --- | --- |
| 部署环境 | 必须支持 Linux/麒麟验收环境，优先支持 x86_64 和 ARM64。 |
| 后端语言 | 必须提供 Go 后端可用连接方式。 |
| 写入能力 | 支持批量写入高频指标样本。 |
| 查询能力 | 支持时间范围查询、聚合、降采样或等效能力。 |
| 保留策略 | 支持数据保留周期或 TTL。 |
| 运维 | 具备备份恢复、权限控制、日志和基础监控能力。 |
| 风险 | TDengine 开源版的 AGPL 合规、国产化适配、社区活跃度和长期维护风险可评估。 |

## 3. 官方资料依据

| 产品 | 官方资料 | 本文采用的信息 |
| --- | --- | --- |
| TDengine | https://docs.tdengine.com/tdengine-reference/supported-platforms/ | 官方平台矩阵列出 Linux、Windows、Galaxy Kirin V10、NeoKylin 等支持情况，并说明 Go 连接器平台支持。 |
| TDengine | https://docs.tdengine.com/tdengine-reference/client-libraries/go/ | Go 驱动实现 `database/sql`，WebSocket 连接为迁移方向，原生和 REST 连接计划在 2027-01-01 停用。 |
| Apache IoTDB | https://iotdb.apache.org/UserGuide/latest/API/Programming-Go-Native-API.html | Go Native API 支持 `Session` 和 `SessionPool`，并提供批量写入、范围查询、聚合查询等接口。 |
| openGemini | https://docs.opengemini.org/guide/quick_start/get_started.html | openGemini 支持 x86-64、ARM-64 和主流 Linux，单节点默认 HTTP 端口为 8086，并提供基础写入查询示例。 |

## 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 和资源占用基线。 |
