小编K. *_*eck的帖子

将哪个数据模型/模式应用于具有不同字段的数据源的时间序列数据存储

我被要求为时间序列数据开发数据存储,尽管进行了大量研究,但我不确定要选择的数据模型和存储技术。

关于数据

要存储在数据存储器中的源数据由物理测量单元提供。每个单元可能有也可能没有不同的变量子集,每个测量站有多达 300 个变量(例如燃料类型、燃料消耗、速度),而所有站的不同信号数量约为 1500。预先知道每个站的预期变量子集。但是,随着时间的推移,可能会向站点添加额外的传感器(随着时间的推移,可能需要更改架构)。所有站都以从 20Hz 到 0.2Hz 的不同速率提供数据。

此外,还有相当数量的元数据可供所有这些测量站使用,最终我们将拥有大约 500 个。

数据通常是批量输入的,而不是“实时”流。批次大小从每小时批次到每月批次不等。

关于查询

进行数据查询主要有两个原因,单测站数据的上报和统计分析,以及跨站比较。大约 80% 的查询与过去 30 天内输入的数据有关。查询每天进行,因此SELECT负载超过INSERT负载。

理想情况下查询像

SELECT var1, var2, ... varN FROM station_data WHERE station_id=X OR station_id=Y AND TIMESTAMP BETWEEN ... AND ...;
Run Code Online (Sandbox Code Playgroud)

非 SQL 专家可以轻松访问数据。此外,简单的基于时间的聚合算法应该是可能的(AVG、MAX 等 pp)。

现在的情况

目前,使用高度规范化的结构将数据存储在 PostgreSQL 数据库中,该数据库现在增长到大约 6TB,每个变量一个表。大约 1500 个数据表中的每一个都是这样的形式

(timestamp, station_id, value)
Run Code Online (Sandbox Code Playgroud)

索引(station_id), (station_id, timestamp), (timestamp)和唯一约束(station_id, timestamp, value)

这种结构需要大量的外部连接(最多 300 个外部连接),这使得数据检索变得繁琐且计算成本高。

研究

到目前为止,进行了以下考虑:

数据库技术

  1. 虽然 NoSQL 将提供所需的架构灵活性,但确保数据完整性、访问控制和元数据管理的工具似乎具有挑战性,并且内部不存在 NoSQL 经验。此外,阅读与此相关的评论和答案似乎有利于我们用例的 …

schema postgresql database-design time-series-database timescaledb

8
推荐指数
1
解决办法
294
查看次数