gpt4 book ai didi

mysql - 高效存储传感器数据

转载 作者:行者123 更新时间:2023-11-29 01:29:57 25 4
gpt4 key购买 nike

我正在考虑重新开发一个存储和可视化传感器数据的应用程序。该应用程序可供多个用户访问,他们可以添加无限的传感器。我们现在有 10 个用户,我们有大约 1000 个传感器。用户数量可能不会改变。如果有足够的电力(太阳能电池板),传感器每 5 秒发送一次数据。

现在数据存储在 4 个表中。

  • 用户[id、电子邮件、密码等]
  • 设备[id, name, user_id] user_id: 外键
  • 传感器 [id, device_id, type] device_id: 外键
  • Data [id, sensor_id, time, data] sensor_id: 外键

问题是数据表变得非常大。目标是将数据保留近一年。我使用 MySQL,我对它的性能感到非常失望。现在我正在使用带有 Gunicorn 的 flask ,我正在使用 RabbitMQ 对存储过程进行排队。有什么我可以改变的来提高现有系统的性能吗?如果你从头开始做这件事,你会做出什么改变? NoSQL 会在这种情况下产生很大的不同吗?我问的太多了,但我还是第一次遇到这种问题。

最佳答案

  1. 因为您有 1k 个传感器并且每个传感器每 5 秒生成一次数据,所以在我看来这是一个很好的例子,可以在哪里使用像 Akka 这样的框架。处理很多请求并避免多线程问题

  2. 一旦您的处理阶段看起来得到了优化,您就正确地编写了有关 NoSQL 的内容。评论中的人提到缺少索引,但由于您只有一个表,这可能导致每次 insert 到您的表都会触发所有数据的索引重新计算。这会降低应用的吞吐量。

    您有很多选择来解决这个问题。将表划分到最后一个包含最新数据或使用两个表,一个用于读取和查询,第二个用于写入以及从第二个到第一个的批量插入 - 使用截止索引绝对是快速的。有一个众所周知的问题,您可以针对大量读取或大量写入优化存储,但不能同时针对两者进行优化。

    或者你可以看看NoSQL,尤其是我想到的Redis,看看他们的数据类型http://redis.io/topics/data-types-intro

    Redis 天生就支持长列表。因为它不支持任何查询 SELECT ... FROM ... WHERE ... 你必须提供你自己的索引缓存 以便提供您所需的查询。如果您对如何使用 key:value 存储感兴趣,请查看他们的 twitter。演示。 Twitter 必须像您一样解决同样的问题。

这引出了我的最后一点。如果您想提供更好的可扩展性,但又不知道如何做,请查看 facebook、twitter 或 netflix 架构。

关于mysql - 高效存储传感器数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18520345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com