我正在设计一个mysql表,每10秒钟存储数千个设备和每个设备大约数百条记录。该表旨在记录用于分析的设备数据,某种历史数据库或时间序列数据库,但在事务数据库上。它有6列:ID(PK),时间戳,TagID,DeviceID,十进制值,MessageID。我正在索引时间戳,TagID,DeviceID,十进制值。 当这个表在dba,选择查询方面变得非常大时,我们是否有任何潜在的问题?我们最好每个月创建一个新桌子,以保持桌面尺寸小吗?我不是数据库专家,所以我不知道哪种方式更好。有人请建议。非常感谢。
答案 0 :(得分:0)
SELECTs
会是什么样子?如果您始终需要给定设备的所有数据和时间,请将它们打包到一个列中。我建议JSON
- 编码。否则,您要求每秒INSERTing
10,000行?
如果确实需要将数据项保存在单独的行中,请务必使用某种形式的批处理 - 多行INSERT
(一次100行),或从文件中加载数据。
当桌子变得庞大时,会出现许多可能的问题。 (同样,我需要查看SELECTs
以了解更多细节。)
PARTITIONIng
?不太可能有所帮助。尤其不是BY HASH
。多个表不太可能有用。 (同样,我需要查看SELECTs
以了解更多细节。)
"我正在索引时间戳,TagID,DeviceID,十进制值" - 你的意思是单列索引吗?可能非常浪费。 (同样,我需要查看SELECTs
以了解更多细节。)
如果您需要执行大型SELECTs
来汇总数据;然后让我们谈谈汇总表。
请提供SHOW CREATE TABLE
。您需要缩小数据类型以节省空间。