【发布时间】:2015-12-08 04:32:35
【问题描述】:
我正在编写一个用于查看和管理传感器数据的应用程序。我可以拥有无限数量的传感器,每个传感器每分钟读取一次并将值记录为 (时间、值、传感器 ID、位置 ID、[一堆其他双精度值])。
例如,我可能有 1000 个传感器,每分钟为每个传感器收集数据,一年后最终生成 525,600,000 行。多个用户(最多 20 个)可以绘制任何时间段的数据,在任何范围内放大和缩小,并一次为传感器的数据添加注释。用户还可以修改某些数据点,我需要跟踪原始数据和修改过的数据。
我不确定这样的应用程序的数据库应该是什么样子!它应该只是一张 SensorData 表,带有时间、sensor_id 和 location_id 的索引吗?我应该根据 sensor_id 对这个表进行分区吗?我应该每天将每个传感器的数据保存在文件中(比如 .csv 文件)并根据要求将它们加载到临时表中吗?我应该如何管理注释?
我还没有决定使用 DBMS(可能是 MySQL 或 PostgreSQL)。但我的目的是深入了解此类应用程序中的数据管理。
【问题讨论】:
-
您是正确的,时间、传感器 ID 和位置 ID 是可能索引的列。只有您可以告诉我们哪一列是最重要的。当我从事地震勘探工作时,时间是最重要的专栏。位置 ID 仅用于校正距离的时间。您需要告诉我们哪些列是最重要的选择列。
-
当前的关系数据库可以容纳数万亿和数万亿行。现代关系数据库不再关心行数。
-
传感器的位置是否随时间变化?
-
新的传感器读取数据需要多久对用户可见?它是接近实时的,还是每小时的,还是每天的......?
-
您是否期望数据检索应该优化为读取特定传感器的所有读数,或特定时间片的所有读数?
标签: database database-design large-data