跳到主要内容

性能最大化

优化数据库

在 Superset 中,创建图表时数据集是处理数据的核心组件,首先必须选择一个预先存在的数据集。Superset 允许用户创建两种不同的数据集类型: 物理数据集和虚拟数据集。
物理数据集与数据库表直接相关。虚拟数据集是根据 SQL 查询创建的(可能包括此特定图表不使用的列,甚至可能结合多个表)。
所以优化的重点是减少虚拟数据集的查询,尽量使用物理数据集,减少查询的数据量。

我们可以使用视图,提前在数据库中准备好数据,这是一种空间换时间的做法。利用 Airflow 或 dbt 等各种工具,可以将常用的连接和聚合定义为物化视图或表,然后将其作为物理数据集在预设中使用。Clickhouse 中可以创建物化视图来减少查询所花费的时间。

编制索引。索引可最大限度地减少处理查询时所需的扫描次数,经常用于筛选的列,如时间或特定类别,应用于数据集索引。

过滤。过滤边界数据扫描,减少数据计算量在创建数据集时,为查询添加筛选器或应用 WHERE 子句,以减少最终用户的无关数据。

避免一次性加载大量图表

网络浏览器对可处理的并发请求数量有内置限制,这意味着加载图表数量达到两位数或三位数的仪表盘可能无法达到最佳效果。

因此,无论使用哪种商业智能工具,最佳做法都是尽量减少仪表盘上的图表数量,并减少处理这些图表底层的所有查询所需的总时间。

在Superset中可以是用标签页来避免一次加载太多的图表。仪表盘标签经常被忽视,但它是减少仪表盘初始加载时间的有效方法,还能将仪表盘组织成不同的组。页面加载时,Superset 只为用户显示第一个标签的图表。直到用户点击另一个标签页时,才会显示第二个标签页的图表。

所以在仪表盘中存在大量图表时,建议使用标签页来组织图表。

利用Superset缓存

接下来将介绍 Superset 缓存功能的使用案例、它们如何带来更快的访问速度,并分享相关的后端架构。我们还将介绍用户如何管理缓存以帮助提高性能。

在仪表板上缓存图表数据

通过Redis缓存JSON结果

Redis是网络应用程序与 Superset 所连接的分析数据库之间的加速层。用于构建图表的查询结果会被缓存,以加快对同一图表的后续请求。还要注意的是,任何已定义的过滤器选项也会被缓存。

架构:缓存可视化数据

缓存管理

为了进一步最大限度地提高缓存性能,可以提前计算图表数据,这样仪表盘查看器就无需等待即时查询完成。仪表盘所有者可以每天通过调度或加载仪表盘来为缓存 “热身”,然后再进行其他操作。

需要注意的是,缓存数据是针对应用于仪表盘或图表的筛选器组合的。对过滤器的更改会修改底层 SQL,因此过滤器更改仍会触发对数据库的请求。

此外,虽然缓存确实可以加快仪表盘的加载时间,并保护数据库免受大量普通工作负载的影响,但它并不能真正改善交互式工作流,如在图表生成器页面上探索数据或向仪表盘应用筛选器等交互式工作流程。

如何启用异步查询执行

默认情况下,异步查询是禁用的。为了利用上述共享缓存方法,需要在数据库中启用异步查询。

  1. 导航到数据库屏幕。
  2. 选择数据库的铅笔编辑图标。
  3. 选择 “高级 ”选项卡,然后展开 “性能 ”部分。
  4. 选择异步查询(Asynchronous query execution)执行以启用。
  5. 完成后,选择完成。

架构:使用 SQL Lab 查询进行缓存

设置缓存超时

缓存超时是指表、模式、图表或数据集的数据在预设缓存中保持可访问状态的持续时间(以秒为单位)。所有这些值都可以定义,默认值是全局设置的超时。如果设置为 0,则缓存永不过期。

如果要定义缓存超时,一个主要的考虑因素是用户数据的更改频率。像模式等不常变化的元素,可以定义为 4 周的缓存超时;相反,使用实时数据的图表可能需要设置为 5 分钟。

让我们按照从最长到最短的时间顺序,仔细看看一些潜在的缓存超时设置。

Schema

一般情况下,模式不会经常更改,因此较长的缓存超时是合适的。
建议的缓存超时时间: 1 至 4 周(604,800 至 2,419,200 秒)

Dataset

与模式一样,数据集的更改也不太频繁。列很少更改(即添加或删除),类型也很少改变。
建议缓存超时: 1 天至 1 周(86 400 秒至 604 800 秒)

Chart

应为图表保留最短的缓存时间,因为图表可能需要访问较新的数据,尤其是涉及实时关键数据时。
建议的缓存超时时间: 5 分钟至 1 天(300 至 86,400 秒)

备注

如何定义缓存超时

为模式、表格和图表定义缓存

按照上述导航方向启用异步查询执行,并根据需要在性能部分的图表缓存超时、模式缓存超时和表缓存超时字段中输入缓存超时值。

定义数据集缓存

  1. 导航到数据集屏幕。
  2. 为数据集选择铅笔编辑图标。
  3. 选择 “设置 ”选项卡。
  4. 在缓存超时字段中输入数值。
  5. 完成后,选择保存。