22,210
社区成员
发帖
与我相关
我的任务
分享
CREATE TABLE `kfjk_n1` (
`time` datetime NOT NULL,
`P10_T` tinyint(2) DEFAULT NULL,
`P10_R` tinyint(2) DEFAULT NULL,
`P11_T` tinyint(2) DEFAULT NULL,
`P11_R` tinyint(2) DEFAULT NULL,
`P12_T` tinyint(2) DEFAULT NULL,
`P12_R` tinyint(2) DEFAULT NULL,
`P13_T` tinyint(2) DEFAULT NULL,
`P13_R` tinyint(2) DEFAULT NULL,
`P14_T` tinyint(2) DEFAULT NULL,
`P14_R` tinyint(2) DEFAULT NULL,
`P15_T` tinyint(2) DEFAULT NULL,
`P15_R` tinyint(2) DEFAULT NULL,
`P16_T` tinyint(2) DEFAULT NULL,
`P16_R` tinyint(2) DEFAULT NULL,
`P17_T` tinyint(2) DEFAULT NULL,
`P17_R` tinyint(2) DEFAULT NULL,
`P20_T` tinyint(2) DEFAULT NULL,
`P20_R` tinyint(2) DEFAULT NULL,
`P21_T` tinyint(2) DEFAULT NULL,
`P21_R` tinyint(2) DEFAULT NULL,
`P22_T` tinyint(2) DEFAULT NULL,
`P22_R` tinyint(2) DEFAULT NULL,
`P23_T` tinyint(2) DEFAULT NULL,
`P23_R` tinyint(2) DEFAULT NULL,
`P24_T` tinyint(2) DEFAULT NULL,
`P24_R` tinyint(2) DEFAULT NULL,
`P25_T` tinyint(2) DEFAULT NULL,
`P25_R` tinyint(2) DEFAULT NULL,
`P26_T` tinyint(2) DEFAULT NULL,
`P26_R` tinyint(2) DEFAULT NULL,
`P27_T` tinyint(2) DEFAULT NULL,
`P27_R` tinyint(2) DEFAULT NULL,
PRIMARY KEY (`time`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
为什么我会把多个点的数据放一条记录里面:
1)每个点的数据采集时间都会有毫秒级的间隔,这点时间间隔可以忽略
2)节省了存储空间,提升写入速度
3)方便对比同一时间(实际上应该说是相近时间)各个点的温湿度情况
原本计划建立16个监测点,实际只做了8个,所以这个表里面有些字段是空的
留空是因为有计划扩展,如果短时间不扩的话,还是建议有多少个监测点就给多少个字段
DHT11只能测到整数部分的,小数部分无力测量,所以我使用tinyint(2)存储
另外以时间做主键,不建立任何索引,这样可以保证插入效率最大化
为避免数据库过大,每天会定时压缩数据
按每5秒一次检测来算,24小时大概会产生17280条数据
写了个计划,将前一天每10分钟的数据聚合成一条,取平均值,保留小数后两位,这样一天的数据就只有144条了
同时会将原始数据删除
如果你的服务器配置足够强劲,那么我还是建议你定期对数据预处理一下,查询精度要求不高的话,直接查询处理后的数据,提升效率。
最后
在其他PC上查阅实时数据,我这里用的是C/S架构,直接通过数据包发送到客户端上显示
查阅历史数据才会连接数据库