【问题标题】:MYSQL Best way to break huge data over time?MYSQL 随着时间的推移破坏大量数据的最佳方法?
【发布时间】:2015-05-17 20:28:19
【问题描述】:

我目前正在设计一个系统来监督我需要为它们保留日志和数据的一些设备。 每 15 秒从每台设备接收和存储数据。 现在我在设计数据库架构方面有一些经验,但以前没有这种规模。

将有 2 张桌子。 一个带有设备信息,另一个带有统计信息。 问题是,如果我们有 5.000 台设备,那么我们一天内就会有近 2500 万个结果。几周后,这张桌子就会变得足够大。

现在大部分时间我都需要运行关于过去一天的查询 所以我想以某种方式将这一切分解成更多的表格。

让一个一直运行并实时更新,并在每周结束时将所有数据移动到另一个并保留在那里,以防我需要对旧数据运行一些查询。

现在我应该坚持使用 InnoDB 吗?只有我会使用的外键仅用于统计表中的设备 ID。

谢谢

【问题讨论】:

  • 尝试阅读有关分区的内容 - 每周/每月创建分区可以让您真正快速地删除旧数据,并且可以更快地处理最新数据。并且磁盘空间在删除分区后直接回收。但是有一些缺点(索引是每个分区的“本地”索引,您不能拥有非分区唯一键 - 这在您的情况下可能无关紧要)。如果您需要长时间存储旧数据,您可以使用一些方法将它们归档到单独的表/数据库/服务器,然后使用快速删除来保持“可操作”表的小

标签: mysql database database-schema


【解决方案1】:

如果您一般只想查看过去一天的数据,那么我的建议是按天对数据进行分区。您可以了解更多关于 MySQL 分区的信息here

根据查询,您还需要日期和设备上的索引。每天有 2880 万行,许多查询应该在合理的时间内完成。

分区的一个优点是可以删除和归档它们,而对数据库性能的影响最小。

顺便说一下,每 15 秒 5,000 次插入是每秒 333 次插入。您将需要确保您的硬件足以处理此交易量。

【讨论】:

    猜你喜欢
    • 2012-04-09
    • 2021-01-07
    • 2012-05-11
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    • 1970-01-01
    相关资源
    最近更新 更多