Metabase学习教程:系统管理-5

news2024/11/15 2:16:50

仪表板优化

如何使您的仪表板加载更快。

说到仪表板性能方面,基本上有四种方法可以让仪表板更快地加载:

  • 要求更少的数据.
  • 缓存问题答案.
  • 组织数据以预测常见问题.
  • 提出有效的问题。

图1。包含三个筛选器小部件的示例仪表板,它们使用Metabase附带的示例数据库。

下面是一些关于如何获得仪表板加载速度更快。本指南的大部分内容将集中在第三个要点上,或者您如何组织数据来预测数据将用于回答的最常见问题。

关于过早优化是万恶之源的常见警告。我们的建议假设您已经研究了一段时间的数据,并且从数据产生的洞察力中获得了实质性的好处。只有这样,您才应该问,如何让这个仪表板加载更快?

要求更少的数据

这一点太明显了,常常被忽视,但它应该是第一个开始的地方。你真的需要你正在查询的数据吗?即使你确实需要这些数据,你多久需要一次?

只需限制查询的数据,例如添加仪表板上的默认筛选器。尤其要注意跨越时间和空间的数据:你真的需要每天查看上一季度的数据吗?或者你真的需要每个国家的每笔交易?

即使你需要知道这些信息,你每天都需要吗?你能把这个问题转移到另一个通常只每周或每月审查的仪表板上吗?

当我们探索我们的数据集时,我们应该对我们的所有数据开放,但是一旦我们确定了我们的组织需要做出的决策以及我们需要为这些决策提供信息的数据,我们就应该毫不留情地排除那些对我们的分析没有显著改善的数据。

缓存问题答案

如果数据已经加载,则不需要等待。管理员可以将Metabase设置为缓存查询结果,它将存储问题的答案。如果你有一套仪表板,每个人在早上第一件事打开电脑时都会运行,那么提前运行仪表板,仪表板中的问题将使用保存的结果在几秒钟内加载后续运行。人们可以选择刷新数据,但通常这是不必要的,因为大多数情况下人们只需要查看前一天和之前的数据。

图2。启用缓存以存储运行时间较长的查询的结果。

可以在中配置缓存设置管理面板。通过这些设置,您可以配置要缓存的最短查询持续时间(因此您只缓存长时间运行的查询)、缓存生存时间(TTL)乘数(以指定缓存应保留多长时间)和最大缓存项大小(以便您可以设置缓存数据量的上限)。

你可以使用Metabase审计工具要确定人们通常何时运行各种问题,然后使用Metabase的API提前以编程方式运行这些问题(从而缓存它们的结果)。这样,当用户登录并导航到他们的仪表板时,结果将在几秒钟内加载。即使不采取额外的预热步骤,当第一个人加载这个缓慢的查询时,它也会被缓存以供其他人使用。

组织数据以预测常见问题

您可以做的下一件最好的事情是以这样一种方式组织您的数据,这样它就可以预测将要提出的问题,这将使您的数据库更容易地检索这些数据。

  • 索引经常查询的列.
  • 复制数据库.
  • 非规范化数据.
  • 物化视图:创建新表来存储查询结果.
  • 用汇总表提前汇总数据.
  • 从JSON中提取数据并将其键插入列中.
  • 考虑一个特定于分析的数据库.

除了最后一节之外,其他部分都假设您使用的是传统的关系数据库,如PostgreSQLMySQL最后一节是关于移动到一个完全不同的数据库类型,专门为处理分析而优化,这应该是你最后的手段,尤其是对于初创企业。

索引经常查询的列

向数据库添加索引可以显著提高查询性能。但是,正如索引书中的所有内容没有意义一样,索引也会产生一些开销,因此应该从战略上加以利用。

如何战略性地使用索引?查找查询最多的表,以及最常查询的表在那些桌子上。你可以参考你的个人数据库来得到这个元数据例如,PostgreSQL通过其 pg_stat_statements 模块。

记住要做一些简单的工作,询问你的Metabase用户哪些问题和仪表板对他们来说是重要的,以及他们是否也遇到了任何最经常需要索引的字段要么是基于时间的或基于id的事件数据的思考时间戳,要么是分类数据上的id

或者,在商业版本,您可以使用Metabase审计工具,这样就可以很容易地查看谁在运行哪些查询、多长时间以及这些查询返回记录所用的时间。

一旦确定了要索引的表和列,请查阅数据库的文档以了解如何设置索引(例如,以下是PostgreSQL中的索引).

索引很容易设置(和删除)。以下是CREATE INDEX声明:

CREATE INDEX index_name ON table_name (column_name) 

例如:

CREATE INDEX orders_id_index ON orders (id)

尝试索引,看看如何提高查询性能。如果您的用户通常使用多个过滤器在单个表上,使用复合索引进行调查。

复制数据库

如果您正在使用一个数据库来处理这两个操作(例如,应用程序事务,如下单、更新配置文件信息等)以及分析(例如,用于支持Metabase仪表板的查询),请考虑创建该数据库的副本生产数据库用作仅用于分析的数据库。Metabase连接到该副本,每晚更新副本,并让您的分析员离开查询。分析师的长时间运行查询不会干扰生产数据库的日常操作,反之亦然。

除了使您的仪表板更快之外,为数据分析保留一个副本数据库是一个很好的做法,以避免可能长期运行的分析查询影响您的生产环境。

非范式数据

在某些情况下,这可能是有意义的使非范式化一些表(例如,将多个表合并成一个包含更多列的更大的表)。您将最终存储一些冗余数据(例如每次用户下单时都包括用户信息),但分析师不必这样做参加多个表来获取回答问题所需的数据。

物化视图:创建新表来存储查询结果

物化视图,您将在它们的表中保留原始的、非规范化的数据,并创建新表(通常在下班时间)来存储查询结果,这些查询结果将多个表中的数据组合在一起,以预测分析员将要问的问题。

例如,您可以将订单和产品信息存储在不同的表中。您可以每晚创建(或更新)一个物化视图,该视图将这两个表中最常查询的列组合在一起,并将该物化视图连接到Metabase中的问题。如果您将数据库用于生产和分析,除了消除合并这些数据所需的连接过程外,您的查询将不必与这些表上的生产读写竞争。

物化视图与公共表表达式CTE,有时称为视图)是物化视图将其结果存储在数据库中(因此可以被索引)。CTE本质上是子查询,每次都要计算。它们可以被缓存,但不存储在数据库中。

然而,物化视图将消耗数据库中的资源,您必须手动更新视图(刷新物化视图[名称]).

用汇总表提前汇总数据

这里的想法是使用物化视图甚至是一组单独的表来创建汇总表使计算量最小化。假设您有一个包含一百万行的表,并且您希望在多个列中聚合数据。您可以基于聚合一个或多个表的集合,它将执行初始(耗时)计算。您不必在一天中多次进行仪表板查询并计算原始数据,而是可以创建问题来查询汇总表以获得前一天晚上计算的数据。

例如,您可以有一个包含所有orders表的orders表,以及一个order summary表,该表每夜更新一次并存储汇总数据和其他聚合数据,例如每周、每月的订单总数等。如果某人想查看用于计算该聚合的单个订单,可以使用自定义目的地将用户链接到查询原始数据。

JSON中提取数据并将其键插入列中

我们经常看到组织在关系数据库(如MySQLPostgreSQL)的一列中存储JSON对象。通常,这些组织存储来自事件分析软件的JSON有效负载,比如分段,或振幅.

尽管有些数据库可以索引JSON(例如,PostgreSQL可以索引JSON二进制文件),但是每次仍然必须获取完整的JSON对象,即使您只对对象中的单个键值对感兴趣。相反,考虑从这些JSON对象中提取每个字段,并将这些键映射到表中的列。

考虑一个为分析而优化的数据库

如果您已经完成了上述所有操作,并且仪表板加载时间的长度仍然影响您及时做出决策的能力,那么您应该考虑使用专门为部署分析查询而构建的数据库。这些数据库称为联机分析处理(OLAP)数据库(有时称为数据仓库).

传统的关系型数据库如PostgreSQLMySQL是为事务处理而设计的,它们被分类为联机事务处理(OLTP)数据库。这些数据库更适合用作操作数据库,例如为web或移动应用程序存储数据。他们非常擅长处理以下场景:有人向你的网站提交一个深思熟虑的、密切相关的、一点也不煽动性的评论,你的应用程序向你的后端发出一个POST请求,然后将评论和元数据路由到你的数据库进行存储。OLTP数据库可以处理大量并发事务,如评论帖子、购物车签出、概要文件bio更新等。

OLAPOLTP系统之间的主要区别在于OLAP数据库优化分析查询,如对大量数据的求和、聚合和其他分析操作,以及批量导入(通过ETL工具),而OLTP数据库必须平衡来自数据库的大的读取和其他事务类型:小的插入、更新和删除。

OLAP通常使用列存储。而传统的(OLTP)关系数据库按行存储数据,而使用列存储的数据库(毫不奇怪)按列存储数据。这种列式存储策略使OLAP数据库在读取数据时具有优势,因为查询不必筛选不相关的行。这些数据库中的数据通常组织在事实表,带有(通常是大量的)包含事件的事实表。每个事件都包含属性和外键对维度表的引用,其中包含有关这些事件的信息:涉及的人员、发生了什么、产品信息等等。

Metabase支持几种流行的数据仓库: Google BigQueryAmazon RedshiftSnowflake,  Apache Druid(专门从事实时分析)。Metabase还支持 Presto,它是一个查询引擎,可以与各种不同的数据存储配对,包括 Amazon S3.

开始使用Metabase时,不要太担心底层数据存储。但是随着数据的增长Metabase生长,请留意可能要使用数据仓库调查的指标。例如,Redshift可以查询数PB的数据,并可以扩展到AmazonS3中查询历史数据,而Snowflake则允许您随着组织的增长动态扩展计算资源。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/60051.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

友宝在线在港交所上市申请“失效”:连续两年亏损,王滨为大股东

近日,贝多财经从港交所披露易了解到,Beijing UBOX Online Technology Corp.(北京友宝在线科技股份有限公司,下称“友宝”或“友宝在线”)的上市申请材料已经失效,目前已经无法查看。 其中,招股书…

期末前端web大作业:餐饮美食网站设计与实现——餐厅响应式网站制作html+css+javascript+jquery+bootstarp

🎀 精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

Android开发的UI设计——Material Design

前言 Material Design 是用于指导用户在各种平台和设备上进行视觉、动作和互动设计的全面指南。如需在您的 Android 应用中使用 Material Design,请遵循 Material Design 规范中定义的准则,并使用 Material Design 支持库中提供的新组件和样式。 正篇 …

【软件安装】Ubuntu18.04及20.04中安装omnet++

注意:安装omnet首先看官方安装指导,不要直接百度。 omnet6.0.1官方安装指导omnet6.0只能在Ubuntu20.04及之后的版本使用,因为glibc版本不适配。 Ubuntu18.04安装omnet5.6.2 安装必要支持 更新apt-get $ sudo apt-get update安装依赖软件 $ s…

2022年四川省职业院校技能大赛网络搭建与应用赛项

2022年四川省职业院校技能大赛 网络搭建与应用赛项 (一) 技能要求 (总分1000分) 网络搭建与应用赛项执委会及专家组 2022年06月 竞赛说明 一、竞赛内容分布 “网络搭建与应用”竞赛共分三个部分,其中: 第一…

3个常用的损失函数

1. L2 loss (均方损失) 除以2就是可以在求导时2和1/2可以相乘抵消。 蓝色的曲线表示:y0时,变化预测值y’的函数。 绿色曲线表示:似然函数。e^-l。 是一个高斯分布。 橙色的线:表示损失函数的梯度 可以看到…

记录Windows下mysql更改my.ini文件中datadir路径后启动不起来的问题

1.mysql默认安装到了C盘,想将数据库存储路径改到别的盘下 将Data文件夹和日志复制到H盘 找到mysl服务,右键停止服务 更改my.ini文件中的路径 保存然后启动发现启动不起来 猜测原因1:文件夹没有权限 将文件夹权限给到所有的用户 右击 ”…

[附源码]Python计算机毕业设计Django青栞系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

Linux的进程创建

在Linux下面,对二进制程序有着严格的格式要求,这就是ELF,这个格式可以根据编译的结果不同,分为不同的格式。 ELF的三种类型 一:可重定位文件 在编译的时候,先做预处理工作,例如将头文件嵌入到…

VueX简单又详细的解读,看了就会用

一、VueX是什么 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 二、为什么要用VueX “单向数据流”理念的简单示意: 当我们的应用遇到多个组…

Redis缓存

一.简介 缓存就是数据交换的缓冲区(称作Cache [ kʃ ] ),是存贮数据的临时地方,一般读写性能较高 二.添加Redis缓存 三.缓存更新策略 1.主动更新策略 Cache Aside Pattern(推荐) 需要调用者自己编码,但可控性高 Re…

SimSiam-Exploring Simple Siamese Pepresentation Learning

SimSiam Abstract 模型坍塌,在siamese中主要是输入数据经过卷积激活后收敛到同一个常数上,导致无论输入什么图像,输出结果都能相同。 而He提出的simple Siamese networks在没有采用之前的避免模型坍塌那些方法: 使用负样本lar…

K_A08_003 基于 STM32等单片机驱动L9110模块按键控制直流电机正反转加减速启停

目录 一、资源说明 二、基本参数 1、参数 2、引脚说明 三、驱动说明 L9110模块驱动时序 对应程序: PWM信号 四、部分代码说明 接线说明 1、STC89C52RCL9110模块 2、STM32F103C8T6L9110模块 五、基础知识学习与相关资料下载 六、视频效果展示与程序资料获取 七、项目主要…

【Android工具】群晖安卓客户端基础套件:Drive、video、Photos和DS video安卓TV客户端...

微信关注公众号 “DLGG创客DIY”设为“星标”,重磅干货,第一时间送达。最近终于把all in one搞起来了,all in one就是把一堆功能一堆软件装一台主机里。。all in one(以后简称AIO)相关内容回头慢慢聊。今天先聊聊群晖&…

从一个demo说elf文件

本文的demo是在linux环境下编译解析的,cpu是x86-64 首先我们先写一个功能简单的demo-SimpleSection.c。这个demo中有一个func1函数用来打印数据,一个已经初始化的全局变量global_init_var和未初始化的全局变量global_uninit_var,一个已初始化…

使用TS 封装 自定义hooks,实现不一样的 CRUD

文章目录使用TS 封装 自定义hooks,实现不一样的 CRUD自定义 hooks文件结构type.tsuseDelData.ts使用useFetchList.ts使用useInsert.ts使用部分的接口方法使用TS 封装 自定义hooks,实现不一样的 CRUD 这一篇主要是记录 查缺补漏,提升自己的 强…

三、内存管理 (一)存储器管理

目录 1.1程序运行的基本过程 1.1.1 编辑、编译、链接、装入 1.1.2链接的三种方式 1.1.3装入的三种方式 1.2内存管理基本概念 1.2.1内存保护 1.2.2内存空间扩充 1.2.3地址转换功能 1.2.4内存空间的分配与回收 1.2.4.1连续分配管理方式 1.2.4.1.1单一连续分配 1.2.4.1…

Http协议和Https协议

Http是不安全的,你的数据容易被黑客拦截,篡改,攻击 https要求对数据加密(不能明文传输), 用抓包工具抓http请求,抓出来的都是明文的,你能看得懂的,抓https请求,抓出来的…

网站域名被QQ拦截提示:当前网页非官方页面拦截的解决办法

今天网友提醒,星空站长网的链接被QQ屏蔽拦截了。提示:当前页面非官方页面,请复制到浏览器打开。 如图: 原因:这是因为QQ方面的诈骗信息特别多,所以腾讯官方索性就直接屏蔽了所有的外部链接。让站长们通过申…

Python源码剖析笔记1-整数对象PyIntObject

1、PyIntObject 对象 [intobject.h] typedef struct {PyObject_HEADlong ob_ival; } PyIntObjectPyIntObject是一个不可变(immutable)对象。Python内部也大量的使用整数对象,我们在自己的代码中也会有大量的创建销毁整型对象的操作&#xff…