我想将来自几个气象站的传感器数据存储在SQL数据库中,以便可以通过django网页查看。
为了保持解释简单,我每隔几分钟读取来自每个气象站的几个传感器(布尔值和浮点值)。我还想存储每次读取的时间戳。
在SQL数据库中构建此数据的最佳方式是什么?我想让系统运行几年,所以它必须能够存储数十万个值。我还需要读取这些值,以便在图形中显示。
发布于 2018-08-31 20:48:22
首先,您可以有两个表- stations和readings。
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过程每天运行一次查询,该查询聚合前一天的数据并将其插入到另一个表中。第二个表将与第一个表几乎相同,只是它将只包含每日平均值(而不是几分钟左右的平均值)。
您可以使用预聚合来创建多个不同粒度的表(每小时、每天、每周...)根据您的报告所需。需要的数量和数量取决于您希望它运行的速度,以及您拥有的硬件。
https://stackoverflow.com/questions/52115221
复制相似问题