MYSQL 随着时间的推移打破大量数据的最佳方式?

标签 mysql database database-schema

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

将有 2 个表。 一个包含设备信息,另一个包含统计信息。 问题是,如果我们有 5.000 台设备,那么我们一天会讨论将近 2500 万个结果。几周后,该表将变得足够大。

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

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

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

谢谢

最佳答案

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

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

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

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

关于MYSQL 随着时间的推移打破大量数据的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30291808/

相关文章:

php - 如何在三表系统中插入标签

cassandra - cassandra添加列(如果不存在)

mysql - 1-多-多的数据库结构

database - Django:在嵌套数据结构中序列化模型?

python - 在 Django 中,如何设置默认值以便每个模型都使用 INNODB 创建?

php - 存储求职者信息的数据库设计

按依赖顺序排序的 MySQL 表名

php - 查询返回日期时间低于 X 个月的结果

mysql - MYSQL 如何计算一行中的点数

java - MySQL/Java : Incorrect date value: '1990' for column