我们目前将mysql用于两种类型的表:
第一组是典型的基于交易的表格。
第二种是存储历史数据的表,这些数据通常是一次写入,并且读取多次。它们很大,有数亿行或更大,并且有几个索引。
我们对这些表格有几个问题。
我们缺少哪些mysql功能可以缓解这些问题?我看到MariaDB现在有办法添加不锁定整个表的列,但它没有解决其他问题。
我们也对其他可能解决问题的产品持开放态度。有什么想法吗?
答案 0 :(得分:0)
为什么需要在历史数据中添加列?无论如何,你会为“旧”行分配什么值。
添加列的替代方法是创建“并行”表(也称为“verdical partitioning”)。新表格与原始表格相同PRIMARY KEY
(任何AUTO_INCREMENT
声明除外)。您可以使用LEFT JOIN
从两个表中获取列,并了解“旧”行会为“新”列提供NULLs
。
对历史数据执行的另一个有用的操作是将其视为数据仓库中的事实表。构建和维护“汇总表”以显着加快常见的“报表”类型查询。
在较新的版本的MySQL / MariaDB中,ALTER TABLE ... ADD COLUMN ... ALGORITHM=INPLACE
消除了大部分性能上的痛苦。
通过转向具有许多不良品质的EAV架构,也解决了添加列的问题。所以,只向中途移动。也就是说,将用于过滤和排序的5-10个主列保留为实列,然后将其余的键值垃圾放入JSON
列。 MySQL和MariaDB都有这样的(虽然有一些差异),加上MariaDB有“动态列”。
“但它没有解决其他问题” - 比如??