【问题标题】:Should I process a large amount of data with SQL or Ruby? [closed]我应该使用 SQL 还是 Ruby 处理大量数据? [关闭]
【发布时间】:2013-06-09 00:05:56
【问题描述】:

我有一个 MySQL 表,其中包含数十万个条目。

我需要指定一个日期范围并选择这两个日期之间的所有条目。然后我需要逐小时分解条目并获取特定字段。

用例: 我需要从 6 月 6 日到 6 月 12 日的逐小时细分。因此,在 6 月 6 日,我需要从上午 12 点到凌晨 1 点、凌晨 1 点到 2 点、凌晨 2 点到 3 点等的一系列条目。

哪个更快? (以及为什么!):

  1. SELECT device_id FROM entries WHERE updated_at >= sometime AND updated_at <= sometime+1.hour 运行 144 个 SQL 查询,有时是中午 12 点到下午 1 点,然后是下午 1 点到下午 2 点,等等。

  2. SELECT device_id FROM entries WHERE updated_at >= start_date AND updated_at <= end_date 运行 1 个 SQL 查询以获取整个时间段内的所有条目,然后使用 ruby​​ 将条目按小时分组。

    李>

如果有人有任何资源说明为什么 ruby​​ 或 MySQL 对于这类东西可能更快,我将不胜感激。想做一些阅读。

【问题讨论】:

  • 描述“日志”。您是指单独的行/记录,还是将整个日志文件存储在字符字段中?我们很难从你的肩膀上看到你的意思,所以例子真的可以帮助我们理解你在说什么。一旦我们知道我们可以提出更好的建议。在那之前,我们都是在黑暗中拍摄。
  • 抱歉,logs 是一个错误的名称,导致与日志文件混淆。它只是一个称为日志的表,但也可以称为条目。我会更新我的问题。
  • 解决此问题的一种方法是截断您的updated_at 字段值以删除分钟和秒,并在结果日期时间上执行group by。这将为您提供每小时组。请参阅 stackoverflow.com/questions/7928537/…stackoverflow.com/questions/1921362/…stackoverflow.com/questions/9922840/… 了解想法。

标签: mysql sql ruby-on-rails ruby query-optimization


【解决方案1】:

SQL 数据库是为此类操作而构建的。使用它们!你总是可以做一些基准测试,但结果对我来说似乎非常可预测。

【讨论】:

    【解决方案2】:

    我认为最好的方法是在插入日志时有一个 updated_at_month、updated_at_day、updated_at_hour (TINYINT - 因为所有值都非常小) INDEXED 字段,然后像这样选择范围和分组:

    select device_id FROM logs where updated_at BETWEEN sometime AND some_other_time group by updated_at_month, updated_at_day, updated_at_hour
    

    我假设 updated_at 是索引字段。

    select device_id FROM logs where updated_at_month=6 and updated_at_day>=6 and updated_at_day<=12 group by updated_at_day, updated_at_hour
    

    但是,我们总共讨论了多少行? 我注意到您从中选择 device_id 字段,没有任何计数...或组...也许您应该select device_id, updated_at_day,updated_at_hour, count(*) as times

    【讨论】:

    • 这让我找到了正确的方向。我最终得到了这个 SQL 调用,这正是我所需要的,而且速度更快:SELECT COUNT(DISTINCT(device_id)) AS device_count, updated_at FROM logs WHERE waypoint_id=1 AND updated_at &gt;= '2013-05-15 13:33:47 -0400' AND updated_at &lt;= '2013-06-16 13:33:45 -0400' GROUP BY DAY(updated_at)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-12
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多