我想将来自多个气象站的传感器数据存储在SQL数据库中,以便可以通过django网页进行查看。
为使说明简单,我每隔几分钟从每个气象站读取一些传感器(布尔值和浮点值)。我还想存储每次阅读的时间戳。
在SQL数据库中构造此数据的最佳方法是什么?我想让系统运行多年,因此它必须能够存储数十万个值。我还需要读取这些值以在图形中显示。
答案 0 :(得分:1)
首先,您可以有2个表-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 proc每天运行一次查询,该查询汇总前一天的数据并将其插入到另一个表中。第二张表将与第一张表几乎相同,除了第二张表仅包含每日平均值(而不是几分钟的平均值)。
您可以根据需要使用预聚合来创建多个具有不同粒度(每小时,每天,每周...)的表。所需的数量和所需的数量取决于您希望其运行的速度以及所拥有的硬件。