gpt4 book ai didi

mysql - 数据库设计——存储多少数据,性能与质量

转载 作者:搜寻专家 更新时间:2023-10-30 20:56:15 26 4
gpt4 key购买 nike

有一些值 x,我每 30 秒记录一次,目前保存在一个包含三个字段的数据库中:

  • 身份证
  • 时间
  • 值(value)

然后我正在创建一个移动应用程序,它将使用该数据在 View 中绘制图表:

  • 最后一小时
  • 过去 24 小时。
  • 7 天
  • 30 天
  • 年份

显然,每 30 秒保存一次去年的数据,然后将该数据发送到移动设备会太多(这意味着发送 1051200 个值)。我的第二个想法是也许我可以使用 MySQL 中的平均函数,例如,每 7 天收集所有平均值(一年创建 52 个点),然后发送这些点。这会奏效,但 MySQL 仍然会通过创建平均值进行拖网,如果有很多用户连接,那就很糟糕了。

简单地说,如果这些是我的观点,那么我就不需要跟踪所有这些数据。没有人应该关心一年前 x 是多少,精确到每 30 秒,这很好。我应该能够使用“触发器”来创建一些平均值。

我正在找人检查我下面的内容是否合理:

  • 将每 30 秒的值存储在一个表中(这将用于小时 View ,120 点)
  • 当 30s 表中有 120 行时(120 * 30s = 60 分钟 = 1 小时),使用触发器将前半小时存储在“半小时平均”表中,从中删除前 60 个条目30 年代的表。这个新表需要有一个 ID、开始时间、结束时间和值。这个半小时平均值将用于 24 小时 View (48 个数据点)。
  • 当半小时表超过 24 个条目(12 小时)时,将前 6 个作为平均值存储在 6 小时平均值表中,然后从表中删除。这 6 小时的平均值将用于 7 天 View (28 个数据点)。
  • 当 6 小时表中有 8 个条目时,删除前 4 个并将其存储为平均一天,以用于 30 天 View (30 个数据点)。
  • 当日 View 有14个条目时,去掉前7个并存储在周表中,这将用于年 View 。

这对我来说似乎不是最好的方法,因为它似乎比我想象的要复杂。

另一种方法是保留所有数据,让 mysql 在需要时找到平均值。这将创建一个巨大的数据库。我还不知道性能。 id 是一个整数,时间是一个日期时间,值是一个 float 。 1051200条记录是不是太多了?现在是添加的好时机,我想在树莓派上运行它,但如果没有……我有我可以使用的主机。

最佳答案

您提出的设计看起来不错。或许有更优雅的方法来做到这一点,但您的建议也应该有效。

RRD ( http://en.wikipedia.org/wiki/Round-Robin_Database ) 是一个专门设计用于自动执行所有这些操作的数据库,对于这个专门用途,它的性能应该比 MySQL 高得多。

另一种方法如下:只保留原始表(1051200 条记录),但有一个触发器,每次添加新记录(例如每 30 秒)并存储/将结果缓存在某处。然后,您的数字运算工作量将独立于您必须服务的请求/客户端的数量。

1051200条记录可能太多也可能不多。在您的 Raspberry Pi 中进行测试以找出答案。

关于mysql - 数据库设计——存储多少数据,性能与质量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20491145/

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