【问题标题】:compress measurement data for charts, stored in MySQL压缩图表的测量数据,存储在 MySQL 中
【发布时间】:2017-09-07 07:20:45
【问题描述】:

问题: 我的应用程序每 5 分钟收集约 1000 个不同测量值的数据集。 所以我每小时收集 12.000 个新数据集。

我需要为图表导出这些数据:1 小时、24 小时、1 天、1 周、1 个月、3 个月、6 个月、1 年、所有时间

为了更好的性能和安全的一些存储,我想压缩这些数据。

想法: 1天后,我可以分解这些数据。因此,我想计算 12 次“5 分钟测量”的平均值以获得 1 小时的值。

大概 1 周后,我可以对所有“1h 测量”执行相同的操作,并计算其中 24 个的平均值以获得当天的平均值。

我在 laravel (5.4) 中工作。 数据库如下:

id | identifier (unique) | value (float) | created_at (date)

服务器有 4 个 CPU 3.0 Ghz,32 GB DDR3 RAM

现在我正在寻找一种高性能算法来处理大量数据。

编辑: 一个想法可能是提取大量数据并将其计算的 SVG 图表到 Google 平台(https://cloud.google.com/products/).the 结果可以发布到实时服务器 - 所以这个不计算任何东西。

您如何看待这个想法/(可能的)解决方案?如果是这种情况,您会推荐哪种谷歌产品?

【问题讨论】:

  • 性能有问题吗?
  • @Strawberry 图表用于 web 应用程序的使用 - 有很多活跃用户。此应用程序需要速度。
  • 而速度目前是个问题?
  • 目前该应用程序非常快。所以这不是一个真正的问题atm
  • 在这种情况下,不用担心。当它成为一个问题时,要么你足够有钱聘请专业人士来解决它,要么太富有而无法在意。

标签: php mysql database laravel-5


【解决方案1】:

我只是使用一个单独的 MySQL 表来记录历史、日、周等。

在午夜和每周创建一个 cronjob,您可以使用SELECT AVG(value) FROM datasets WHERE created_at BETWEEN '2017-09-07' AND '2017-09-08' GROUP BY identifier 之类的查询非常高效地收集结果,存储结果并在成功解析后从数据集表中删除数据。

我认为这样甚至不需要几分钟,尽管我会在日期列上添加一个索引。

【讨论】:

  • 谢谢!我会试试的。您认为进行原始查询还是使用 Eloquent 更好?
  • 我总是使用抽象层,所以如果适合您的需要,请使用 Eloquent。这将使防止 sql 注入变得不那么痛苦。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-13
  • 2011-05-09
  • 1970-01-01
  • 1970-01-01
  • 2010-12-09
  • 1970-01-01
相关资源
最近更新 更多