共计 3202 个字符,预计需要花费 9 分钟才能阅读完成。
更多技术交换、求职机会,欢送关注字节跳动数据平台微信公众号,回复【1】进入官网交换群
物化视图是指将视图的计算结果存储在数据库中的一种技术。当用户执行查问时,数据库会间接从曾经预计算好的后果中获取数据,而不须要从新计算视图。具体来说,物化视图是一种以表格模式存储的后果汇合。
当创立一个物化视图时,数据库会在后盾对视图进行计算,并将后果存储在表中。当用户查问该视图时,数据库会间接从表中获取后果,而不须要从新计算视图。这样能够大大提高查问性能和响应速度。
在应用物化视图时,须要留神以下四点:
- 物化视图的计算结果须要实时更新。如果源数据发生变化,须要及时更新物化视图的计算结果,以确保后果的准确性。
- 物化视图须要占用存储空间。因为物化视图须要将计算结果存储在表中,因而会占用肯定的存储空间。在应用物化视图时,须要衡量存储空间和查问性能的关系。
- 物化视图须要思考查问的复杂度。对于一些简单的查问语句,物化视图可能无奈进步查问性能。因而,在应用物化视图时,须要对查问语句进行剖析和优化,以确保可能施展物化视图的最大作用。
- 总之,物化视图是一种十分实用的技术,能够帮忙咱们进步数据库的查问性能和响应速度。在理论利用中,咱们须要依据理论状况进行衡量和优化,以充分发挥物化视图的作用。
利用场景介绍
物化视图作为日常进步数据库查问性能和响应速度的一种实用技术,能够帮忙业务人员在多个场景中播种价值。
场景 1:数据分析场景
以字节跳动举例,咱们每天要解决大量的数据,比方包含用户行为数据、广告投放数据等等。这些数据往往须要进行简单的查问和剖析,应用物化视图来存储常常应用的数据,就能够缩小简单查问的执行工夫,进步数据分析的效率。
场景 2:广告投放场景
在广告投放场景中,业务人员须要对广告投放数据进行实时监控和剖析。物化视图能够帮忙存储广告投放数据的计算结果,以便疾速查问和剖析。通过物化视图,疾速地检测广告投放中的问题,缩小广告投放的错误率,进步广告平台的效率和盈利能力。
场景 3:举荐零碎
家喻户晓,举荐零碎每天都须要对大量数据进行简单计算与剖析。通过应用物化视图,将计算结果存储在表格中,缩小计算复杂度,进步举荐零碎的响应速度。比方,咱们能够通过物化视图存储用户的趣味标签,减速对用户的个性化举荐。
ByteHouse 物化视图疾速入门
在 ByteHouse 客户的理论利用中,物化视图性能能够利用于许多场景。
比方,在电子商务网站中,咱们能够创立一个物化视图,用于计算每个用户的订单总额。当须要查问某个用户的订单总额时,数据库只须要从物化视图中获取后果,而不须要从新计算,这能够大大提高查问的速度。ByteHouse 客户——Chainbase 便是一个例子。
Chainbase 是一个 Web3 开发者平台,为开发人员提供云化的 API 服务,以帮忙接入加密网络、轻松构建可扩大的 Web3 原生利用。开发者们能够应用 ChainBase,来构建高效、平安的区块链利用。
ByteHouse 提供的物化视图性能,不仅能让 ChainBase 的查问速度失去晋升,同时还实现了实时可视化的数据分析,大大晋升了数据库查问剖析的效率。
ByteHouse 的物化视图性能具备 7 个显著特点:
- 始终保持最新
- 能够手动或自动更新
- 易于应用,能够通过界面或 SQL 进行治理
- ByteHouse 会主动为高频简单查问创立物化视图
- 企业级性能
- 反对 RBAC
- 提供统计数据和倡议,帮忙用户优化物化视图
上面简略介绍如何疾速入门,应用 ByteHouse 物化视图性能:
1. 用户界面进入物化视图:数据库 > 新建 > 新建物化视图
2. 依据 SQL 样例,填写物化视图语句。
3. 创立胜利后。如果须要对以往历史的数据分区进行物化,依据 SQL 样例,手动刷新所定义分区。
如何进行 SQL 创立
举荐用法 – 手动定义指标表 (target_table_name) 的物化视图创立办法
CREATE MATERIALIZED VIEW [IF NOT EXISTS] mv_name [TO [db_name.]target_table_name]
AS SELECT select_statement FROM base_table_name;
其余用法 – 零碎外部定义指标表的物化视图创立办法
CREATE MATERIALIZED VIEW [IF NOT EXISTS] mv_name([col1 DataType1]
[col2 DataType2]
...)[ENGINE = engine_name]
[PARTITION BY par_name]
[ORDER BY col_name [POPULATE]]
AS SELECT select_statement FROM base_table_name;
如何更新物化视图
在创立物化视图时刻起,物化视图的数据与原始表的数据同步更新,如果须要对以往历史的数据分区进行物化,对于运行中的物化视图,咱们提供了刷新分区性能。
更新语法
REFRESH MATERIALIZED VIEW xxx PARTITION xxx
例子:refresh materialized view test partition ‘2019-01-01’(同步 ’2019-01-01’ 分区的原始数据)
更新过程
该性能用来更新物化视图表的某个分区数据,并默认进行级联操作,即更新该视图表分区数据的同时,会同时更新依赖于以后视图表的所有物化视图的同一 partition,并始终级联传递上来。如果不想级联,能够加上 SETTINGS,设置 cascading_refresh_materialized_view 为 0,即:
refresh MATERIALIZED VIEW xxx PARTITION xxx SETTINGS cascading_refresh_materialized_view = 0
在更新视图分区数据时,相应底表分区的数据量可能非常微小,更新会占用许多 CPU 和内存,还可能会导致更新失败,这时能够应用参数 max_rows_to_refresh_by_partition。在 Clickhouse 中一个 partition 由多个数据 part 组成,应用该参数,咱们能够管制在该 partition 单机数据总行数超过该参数定义的值时,基于 part 级别一部分一部分的更新该分区,而不是在整个 partition 上进行更新,这样能够管制资源使用量。当然,如果视图是聚合表,按 part 一部分一部分的进行更新会导致最初视图数据的聚合成果不如在整个 partition 上进行更新,须要本人进行均衡。该参数默认值是 100000000(1 亿),应用例子:
refresh MATERIALIZED VIEW xxx PARTITION xxx SETTINGS max_rows_to_refresh_by_partition = xxx
此外,能够应用 partitionStatus 函数获取一张物化视图表对应分区的状态,状态有三类:None(示意分区不存在),Normal(示意分区存在并处于失常状态),Refreshing(示意分区正在被更新)。例子:
select partitionStatus(test, test_mv, '2020-01-01')
如何治理物化视图
入口:数据库 > 物化视图
Bytehouse 会列出数据库中的所有物化视图,以及它们的底表 / 指标表行数比例,以及命中率。
- 底表 / 指标表行数比例:当该比例 >10,则示意该物化视图比拟有效率
- 命中率:当该命中率较高时,则示意该物化视图在 60 天内常常被拜访
如何查问物化视图
用户能够间接查问物化视图,但个别举荐间接查问底表。Bytehouse 优化器会主动做出查问改写,以大幅度改善查询处理工夫。
如何删除物化视图
用户能够通过界面或者 SQL 删除物化视图。
界面
如果用户创立了指标表,也须要手动 drop 指标表。
SQL 如果用户创立了指标表,也须要手动 drop 指标表。
drop view xxxx
点击跳转 火山引擎云原生数据仓库 ByteHouse 理解更多