我正在运行数据库进行日志分析。目前我使用MySQL数据库,我的分析表如下所示:
我使用此表为每个条目创建视图,进行5分钟聚合和每日聚合。我每天要插入大约400,000个条目。目前这张表中有大约7千万行。
我的实际问题是,我的查询变慢,我的插入/更新查询以及我的聚合查询。
所以我为我的每日聚合创建了第二个表。每天工作一次,进行最后一天的聚合。第二个作业将删除原始表格中超过30天的所有条目。
我的问题: 这是正确的方法还是更好的表结构甚至是另一个数据库(例如NoSQL,Graph-database等)?
答案 0 :(得分:1)
除非必须,否则不要索引UUID。它非常随机,导致大量I / O.请参阅here。
正如您所讨论的那样构建Summary表;它们是使Data Warehousing表现良好的主要方式。但是,让我们看看你有什么 - SHOW CREATE TABLE
和SELECTs
,加上表格大小。
你是如何进行摄取的? Here是关于扩展的一些提示。表中400K /天和70M对MySQL来说没问题。
server_name(以及其他列)的规范化 - 请参阅提取链接。
为什么会有更新?日志往往不需要更新。汇总表可能使用批量IODKU,这是一种更新;你用的是什么?
至于删除旧数据,PARTITION BY RANGE(TO_DAYS(...))
有32个分区,每晚使用DROP PARTITION
。这比<{1}} Partition tips
多少内存?使用InnoDB? 70M行占用大约7GB? DELETE
的价值是什么?
您在什么条件下触摸的数据超过一天?如果“永远不会”,则缓存应该不是问题。如果经常&#39;,让我们研究这些案例。