如何利用memsql合并多个表的报告

我们使用memsql列存储数据库。 我们为后端体系结构中的每个“偶数类型”创建管道,并为其创建专用表(我们称为“源表”)。因此,每个管道都会在memsql上写入一个表(也称为源表)

我们为客户提供了不同的业务报告,这些报告包含来自多个源表的数据(没有必要加入我们的表,因为某些字段可以存在于一个表中,而某些字段则不存在)

因此,解决此问题的唯一方法是创建包含UNION函数的庞大而复杂的查询,从而使事情难以维护和理解

维护和保持这种体系结构的最佳实践是什么,这将使我们能够在多个源表上创建多个报告并降低查询的复杂性。

我们认为的一种方法是对每个报告进行专用查看。但是我们不确定是否要那样走。我们需要创建外部eta,以向该视图中添加越来越多的数据(每日过程) 您对此有何想法?那是一种方法吗?

使用UNION函数处理大量查询的第二种方法(在运行时) 我们不喜欢这种方式,因为它在查询时会在运行时带来复杂性

我想提及的是,这些报告不需要实时更新。我们可以从一次更新到另一次更新拥有缓冲(小时)

有想法吗?

nwpu_guy 回答:如何利用memsql合并多个表的报告

我看到了两种可能的策略:针对读取进行优化或针对写入进行优化。您有一个将数据快速摄取到“源”表的管道。这绝对是针对写优化的。但是现在您正在为阅读而苦苦挣扎。视图并不是一个坏方法,但是联接成本是在每次运行报表时产生的。

请考虑使管道(或另一个管道)将数据反规范化为报表所需的格式。这不是具有嵌入式联接的视图,而是特定于所读取内容的另一种数据存储。 (是的,重复的数据,但是存储很便宜,并且假设经常使用报告,那么该策略会在提取时将转换计算转移到单个计算,而不在每次运行报告时都重复。)

如果发现您经常需要为不同的报告加入标准数据,或者这些报告更具针对性,请考虑更改“源”表架构以包括这些字段,并在管道提取期间填充它们。然后,您可以使用更简单的查询来获得速度而无需重复的表。这样的非规范化数据肯定具有重复元素-因此写操作更加复杂-但读操作效率更高。

本文链接:https://www.f2er.com/2828293.html

大家都在问