【问题标题】:Database suggestions for storing a "count" for every hour of the day用于存储一天中每个小时的“计数”的数据库建议
【发布时间】:2012-06-15 22:07:02
【问题描述】:

我已经使用在线存档服务一年多了。不幸的是,我没有投入基础设施来保持统计数据。我现在只有存档访问日志。

每小时有两个音频文件(一个为 0-30 分钟,另一个为 30-60 分钟)。我目前使用 MySQL 进行计数。看起来像这样:

|     DATE     |   TIME  | COUNT |
|  2012-06-12  |  20:00  |  39   |
|  2012-06-12  |  20:30  |  26   |
|  2012-06-12  |  21:00  |  16   |

等等……

这使得 365 天 * 24 小时 * 2(一小时 2 次)> 17500 行。这使得读/写速度变慢,我觉得这样存储它浪费了很多空间。

那么你知道有什么其他的数据库可以更高效、更快地存储这些数据吗?

【问题讨论】:

  • 17500 不是很多。您可以将日期和时间作为 DATETIME 存储在一列中。如果阅读速度很慢,请考虑为 DATETIME 添加索引。
  • 当您达到数十亿行时担心。考虑到有数万亿行的数据库,175k 非常小。
  • @Michael 对。我可以使用索引。但是没有任何方法可以缩短写入时间,是吗?
  • @Marc 哦哈哈。显然我不知道。但是出于好奇,还有其他数据库可以更好地存储它吗?
  • @Ram 如果写入时间很慢,这可能是因为查找所需行(因此是索引)所花费的时间,或者因为您的吞吐量超出了您的处理能力。如果是吞吐量问题,则不要实时存储计数。而是像往常一样存储日志,并使用夜间脚本编译统计信息。

标签: mysql database database-design


【解决方案1】:

这不是太多行。如果索引正确,读取速度应该会非常快(写入速度会慢一些,但即使表有大约 50 万行,我也几乎没有注意到)。

如果您使用类似的东西从数据库中选择项目

select * from my_table where date='2012-06-12'

然后你需要确保你在日期列上有一个索引。如果您在 where 语句中使用多个列,也可以创建多个列索引。这将使您的读取语句非常快(就像我说的大约一百万行)。

如果您不熟悉索引,请参阅此处:

MySQL Indexes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多