mysql - 如何在 SQL 中构造传感器数据?
问题描述
我想将来自多个气象站的传感器数据存储在 SQL 数据库中,以便可以通过 django 网页查看。
为了使解释简单,我每隔几分钟从每个气象站读取一些传感器(布尔值和浮点值)。我还想存储每个读数的时间戳。
在 SQL 数据库中构造这些数据的最佳方法是什么?我想让系统运行多年,所以它必须能够存储几十万个值。我还需要读取这些值以显示在图表中。
解决方案
首先,您可以有 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 每天运行一次查询,该查询汇总前一天的数据并将其插入到另一个表中。第二个表与第一个表几乎相同,只是它只包含每日平均值(而不是几分钟的平均值)。
您可以根据报告的需要使用预聚合来创建具有不同粒度(每小时、每天、每周...)的多个表。您需要多少和哪些取决于您希望它运行多快以及您拥有的硬件。
推荐阅读
- cassandra - 如何摆脱被替换后显示为空的节点?
- groovy - 将数千个流文件合并为一个流文件的 Groovy 脚本
- javascript - Chart.js 时间刻度图 - xAxis 标记
- asp.net-web-api - 创建pdf文件时需要授权
- bash - printf 返回多个副本
- google-sheets - 如何在 Google 表格中显示 24 小时?
- http - Flatbuffers的MIME类型?
- ubuntu - 502 Bad Gateway nginx/1.14.0 (Ubuntu) 错误
- php - 我是否需要 manage_page 权限才能使用 facebook php sdk 管理我的页面?
- python - 从现有系数创建 H2OGeneralizedLinearEstimator 实例