将数据存储在一个大表中或每月创建一个新表

时间:2016-02-29 01:27:48

标签: mysql sql performance mariadb

我正在设计一个mysql表,每10秒钟存储数千个设备和每个设备大约数百条记录。该表旨在记录用于分析的设备数据,某种历史数据库或时间序列数据库,但在事务数据库上。它有6列:ID(PK),时间戳,TagID,DeviceID,十进制值,MessageID。我正在索引时间戳,TagID,DeviceID,十进制值。 当这个表在dba,选择查询方面变得非常大时,我们是否有任何潜在的问题?我们最好每个月创建一个新桌子,以保持桌面尺寸小吗?我不是数据库专家,所以我不知道哪种方式更好。有人请建议。非常感谢。

1 个答案:

答案 0 :(得分:0)

SELECTs会是什么样子?如果您始终需要给定设备的所有数据和时间,请将它们打包到一个列中。我建议JSON - 编码。否则,您要求每秒INSERTing 10,000行?

如果确实需要将数据项保存在单独的行中,请务必使用某种形式的批处理 - 多行INSERT(一次100行),或从文件中加载数据。

当桌子变得庞大时,会出现许多可能的问题。 (同样,我需要查看SELECTs以了解更多细节。)

PARTITIONIng?不太可能有所帮助。尤其不是BY HASH。多个表不太可能有用。 (同样,我需要查看SELECTs以了解更多细节。)

"我正在索引时间戳,TagID,DeviceID,十进制值" - 你的意思是单列索引吗?可能非常浪费。 (同样,我需要查看SELECTs以了解更多细节。)

如果您需要执行大型SELECTs来汇总数据;然后让我们谈谈汇总表。

请提供SHOW CREATE TABLE。您需要缩小数据类型以节省空间。