python读取redis存储数据的存储时间_Redis应该如何存储带时间戳的分类实时数据?...

一个物联网项目,最初选用了Linux + Twisted + MySQL + Python来构建。看重的是Twisted的扩展性。但是MySQL成为性能瓶颈。

系统架构是:

大量设备每隔0.5秒以TCP长连接方式连接Twisted Socket服务器,将实时收集的数据导入数据库中,然后Web浏览器以每隔2秒的间隔从数据库中获取数据并绘图。

数据在MySQL中以二维表形式存在:

recID,devID,timestamp(UNIX), value_1, value_2, …. value_8

由于这些数据均带时间戳,所以读取时,首先要针对特定设备ID进行时间戳对比。实际上是两个需求:检索devID,带时间排序的数值。

在单一表格中由于前段累计数据过快,所以检索时间较长,大约超过3~5秒。

弥补方式一:是定时将Expire的数据删除,但是这在InnoDB引擎中会照成长达45秒的表锁。

弥补方式二:采用PINGPONG方式在不同表间切换,但是这会造成Socket/Web两端数据同步问题,而且表锁依然存在。

有人推荐Memcached和Message Queue来解决问题。一番折腾,发现Redis可以覆盖这两种组件。

但是现在纠结应该使用哪种数据类型存储?String, Hash, List, Set, Sorted Set?

这里面关键在于key检索是需要精确的(hh:mm:ss:ms),而目前浏览器给出的时间不够精确,给出的是时间窗(hh:mm:ss~hh:mm:ss)。直接按照Key检索可能会有遗漏。即使按照通配符检索,会出现整点遗漏的问题。

St

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值