• 大佬们,请教一下数据读取
  • 发布于 2个月前
  • 96 热度
    4 评论

小弟负责是后端内容的编写,现在系统有一批传感器,数据格式都是 json ,每个传感器每秒都有数据发送过来。我接收,然后写入文件,每天一个.json ,例如:传感器编号-日期-文件,这样的格式。文件中每行都是{}的数据,里面有时间戳,data ,例如{"time":12346574,"data":[1,2,3,4,5]},每一行都是这样的形式。


文件夹目录有分层,每天都有一个日期对应的目录,里面就是当天的数据文件。数据同时存入到数据库 Mongo 中,单个节点,建了 time 字段的索引。现在查询历史数据量多的话感觉速度还是有点慢,依靠 time 字段找出时间范围的数据,取出每条数据的 data 元素;现在小弟想数据库只存储当前 3 天的数据,就是额外写一个脚本定时删除三天以前的数据,然后历史数据改为读取对应文件及日期的文件数据,这样读取历史数据是否可行,速度是否更快呢,后端用的 node ,他读取数据量量一大就容易内存栈,这个 data 字段元素有 200 个浮点数,一天能存 86400*200 多个数字,所以读取历史数据有时候读的时间范围大就容易崩,想请教大佬们怎么处理好一点。

用户评论
  • 我曾经
  • 虽然我很菜,但我也做过类似的数据处理。
    我的看法是要分析的数据不要存成数组,后期可能不方便做查询,data 的每个数值应该有个属性名。
    假设[26, 80, ..]代表的是 [温度, 湿度, ...] 转成 temp: value, hum: value 的方式存储。可能你的情况跟我的不太一样,就当我没说。
    另外每个传感器应该有 uuid 的吧,索引做成 uuid+time 不知道会不会好些?还可以考虑写个额外的程序对数据做分析,比如做小时维度的数据统计、月维度的统计等。
  • 2024/12/31 9:18:00 [ 0 ] [ 0 ] 回复
  • 怅忘归
  • 没必要, 数据库一般会用一些压缩算法, 肯定比你支持存 json 文件要省的.
    数据库里用 partition table, 按日期分
    内存溢出肯定是你代码有错, 86400*200 个 float 应该还不到 100MB.
  • 2024/12/31 9:15:00 [ 0 ] [ 0 ] 回复
  • 离人愁
  • 如果查询范围不大的话,可以考虑直接让前端拿对应文件的内容前端处理,让客户端分担服务端的性能压力,哈哈哈哈,前提是你的文件服务器和业务服务器不是同一个服务器,比如用的云服务商 oss 之类的。
  • 2024/12/31 9:07:00 [ 0 ] [ 0 ] 回复