【问题标题】:How do I structure sensor data in SQL?如何在 SQL 中构造传感器数据?
【发布时间】:2019-02-06 11:20:35
【问题描述】:

我想将来自多个气象站的传感器数据存储在 SQL 数据库中,以便可以通过 django 网页查看。

为了简单起见,我每隔几分钟从每个气象站读取一些传感器(布尔值和浮点值)。我还想存储每个读数的时间戳。

在 SQL 数据库中构建这些数据的最佳方式是什么?我想让系统运行多年,所以它必须能够存储几十万个值。我还需要读取这些值以显示在图表中。

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 你已经用 mysql 和 sqlite 标记了这个。您实际使用的是哪一个?答案会有所不同。
  • 我还没有尝试过任何东西,而且我还没有 100% 决定使用数据库,尽管这在 Django 中似乎并没有什么好说的。我会接受 Vatev 的建议,这似乎是一个简单而有效的结构。

标签: mysql sql django sqlite time-series


【解决方案1】:

首先,您可以有 2 个表 - stationsreadings

stations 表有一个自动增量 id 字段以及您需要/拥有的任何其他有关电台的信息。例如:

`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL DEFAULT '0',
`lat` DOUBLE NOT NULL DEFAULT '0',
`lng` DOUBLE NOT NULL DEFAULT '0',
...other things
PRIMARY KEY (`id`)

readings 表包含在给定时间来自电台的单个报告的条目(我猜这些值将在几分钟内取平均值):

`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`time` TIMESTAMP NOT NULL,
`id_station` INT NOT NULL,
`temp` DOUBLE NULL,
`humidity` DOUBLE NULL,
`wind_speed` DOUBLE NULL,
`wind_dir` DOUBLE NULL,
`pressure` DOUBLE NULL,
`squirrel_count` DOUBLE NULL,
... other things 
PRIMARY KEY (`id`),
INDEX `time` (`time`),
INDEX `id_station` (`id_station`)

根据读数的数量和服务器的“大小”,您可能可以使用此表进行聚合(例如每天)并创建图表,或者您可能需要在另一个表中预先聚合数据用于报告。

例如:脚本/SQL proc 每天运行一次查询,该查询汇总前一天的数据并将其插入到另一个表中。第二个表与第一个表几乎相同,只是它只包含每日平均值(而不是几分钟的平均值)。

您可以根据报告的需要使用预聚合来创建具有不同粒度(每小时、每天、每周...)的多个表格。您需要多少以及需要哪些取决于您希望它运行多快以及您拥有的硬件。

【讨论】:

  • 非常感谢您的回复,Vatev!这正是我所希望的那种答案。聚合平均值似乎是长期图表的一个很好的解决方案。
猜你喜欢
  • 2015-07-07
  • 2015-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 2014-11-06
  • 1970-01-01
相关资源
最近更新 更多