【发布时间】:2023-03-07 13:24:01
【问题描述】:
我有一个包含 20 多个表的 MySQL 数据库,但其中一个非常大,因为它从不同的传感器收集测量数据。它的磁盘大小约为 145 GB,包含超过 10 亿条记录。所有这些数据也被复制到另一个 MySQL 服务器。
我想将数据分成更小的“碎片”,所以我的问题是以下哪种解决方案更好。我会使用记录的“时间戳”将数据按年划分。几乎所有在该表上执行的 SELECT 查询都在查询的“where”部分包含“timestamp”字段。
以下是我无法决定的解决方案:
- 使用 MySQL 分区并按年份划分数据(例如 partition1 - 2010、partition2 - 2011 等)
- 创建单独的表格并将数据按年份划分(例如,measurement_2010、measurement_2011 等表格)
还有其他我不知道的(较新的)可能选项吗?
我知道,在第一种情况下,MySQL 本身会从“分片”中获取数据,而在第二种情况下,我必须为它编写一种包装器并自己完成。对于第二种情况,是否有任何其他方法可以使所有单独的表都被视为“一个大表”来从中获取数据?
我知道过去已经有人问过这个问题,但也许有人想出了一些新的解决方案(我不知道),或者最佳实践解决方案现在已经改变。 :)
非常感谢您的帮助。
编辑:
架构类似于这样:
device_id (INT)
timestamp (DATETIME)
sensor_1_temp (FLOAT)
sensor_2_temp (FLOAT)
etc. (30 more for instance)
所有传感器温度每分钟同时写入一次。请注意,大约有 30 个不同的传感器测量值连续写入。这些数据主要用于显示图表和其他一些统计目的。
【问题讨论】:
标签: mysql database partitioning large-data