分析型数据仓库中如何实现读写分离

技术分析型数据仓库中如何实现读写分离这篇文章主要为大家展示了“分析型数据仓库中如何实现读写分离”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“分析型数据仓库中如何实现读写分离”

本文主要展示“如何在分析数据仓库中实现读写分离”。内容简单易懂,条理清晰。希望能帮你解开疑惑。让边肖带领大家学习学习《分析数据仓库中如何实现读写分离》一文。

与以MySQL为代表的传统事务型数据库相比,数据仓库有一个很大的特点,那就是主要针对批量写入和查询进行优化,不能支持更新和事务等高级功能。一些商业数据仓库分析系统,如Vertica,已经能够在几秒钟内导入和查询数千亿个数据。

厕神数据一直致力于帮助企业建设数据仓库,实现数据的二级响应,积累数据资产。本文主要通过对厕神数据的技术探索和实践,探讨如何利用现有的开源组件实现分析数据仓库中的读写分离。

为什么要进行读写分离

分析数据仓库一般具有以下特点:

(1)面对复杂的多维分析需求,可以任意维度上滚下钻。

(2)存储数据维度多,表宽,一般稀疏。

(3)数据量大,一次写入,多次查询。

针对这一特点,分析型数据库一般选择列存储数据格式,如Parquet等。优点是统计分析效率高,稀疏宽表的存储压缩率高。因此,我们可以认为列存储格式是为读取而优化的存储格式,我们称之为ReadOptized Store(ROS)。

但是列存储格式也有一个缺点:一旦生成这种格式的数据,就很难修改,也很难在现有的数据文件中插入新的数据,只能添加新的数据文件。像MySQL这样的传统数据库使用适合修改和插入的行存储文件格式。我们可以认为这种行存储格式是一种写优化的存储格式,称为写优化存储(WOS)。

综上所述,要实现一个几秒钟就能导入查询的分析型数据库,如果只使用ROS,很难支持大数据量的二级导入。如果只用WOS,很难实现任意维度的二级查询,需要读写分开。

读写分离的实现原理

WOS和ROS都需要存在于数据仓库中,这样我们就可以为所有的写操作生成WOS文件;同时,所有的读取操作主要依赖于ROS文件,但也要查询少量的WOS文件。总体示意图如下:

分析型数据仓库中如何实现读写分离

图1读写分离示意图

如图所示,WOS文件需要定期转换成ROS文件。同时,由于ROS一般存在于数据仓库的多个Partition中,一个WOS可能转化为多个ROS。转换过程需要是原子操作,因为对于上层查询引擎,同一时间只能有一个相同数据的副本。

开源方案的操作

前面简要介绍了读写分离方案的原理。在具体的工程实践过程中,厕神数据的工程师们在方案选择和实践中仍然面临着许多困难。让我们简单介绍一下厕神数据在构建数据仓库的实践中啃过的“硬骨头”。

ROS的选择相对简单。我们的工程师选择了Parquet Impala的查询方案,同时结合我们的业务特点进行了大量的代码级优化。WOS可能有很多选择。我们可以选择常用的HDFS线存储文件格式,如TextFile、SequenceFile、Avro等。

以SequenceFile为例。当我们定义自己的Impala表时,可以将一个特殊partition文件的存储格式指定为SequenceFile,将其他Partition按日期指定为分区的普通数据,将格式指定为Parquet。这种方法的优点是总是只有一个表。

后来基于查询效率和未来架构升级的考虑,我们最终选择了Kudu作为WOS,架构实现示意图如下:

分析型数据仓库中如何实现读写分离

图2读写分离实现图

如图所示,我们将创建三个物理表,其中两个Kudu表作为WOS,一个Parquet表作为ROS。的所有写入操作都会在摄取状态下写入库都表。当摄取表被写入到某个大小时,它将自动转换为分段状态。

此时,一方面,我们生成一个新的Kudu表作为摄取表,另一方面,我们开始从WOS到ROS的转换,并通过一个名为Mover的任务执行该操作。将库都表中处于暂存状态的所有数据转换为分区对应的拼花表。

当Staging状态下的表转换完成,摄取状态下的表已满时,会触发切表操作,需要更新元数据告诉Impala使用新数据进行查询,整个切表操作是原子的。而且,转换后的Staging表需要保存一段时间,以免切割表前发起的查询操作没有及时执行。

完成。

对于查询请求来说,我们会建立一个包含 Staging 表、Ingesting 表和 ROS 表的虚拟表,即一个 View。用户的查询始终指向一个 View,但是下面的物理表会经常发生变化。这样就兼顾查询数据的不断更新及查询性能的优化两方面了。

在实现的过程中还有很多具体的工作,例如如何对表进行加列操作,保证各个表的结构一致;Parquet 表中碎文件较多影响查询效率,如何定期合并等。限于篇幅,这里不再具体介绍。

神策数据最终的技术架构如下图:

分析型数据仓库中如何实现读写分离

以上是“分析型数据仓库中如何实现读写分离”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/112491.html

(0)

相关推荐

  • vue怎样通过nodejs拿取数据库数据(vue要用到nodejs中的哪些知识)

    技术vue+nodejs获取多个表数据的方法是什么这期内容当中小编将会给大家带来有关vue+nodejs获取多个表数据的方法是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。读取两个

    攻略 2021年12月20日
  • 交管网12123,交管12123到底是什么东西

    技术交管网12123,交管12123到底是什么东西交管12123是一款手机APP,该平台开通后,群众实名注册开通账号后,可享受互联网交通安全综合服务管理平台提供的驾考和车检预约交管网12123、办牌办证、违法处理和罚款缴

    生活 2021年10月30日
  • VBS如何打开当前脚本所在文件夹

    技术VBS如何打开当前脚本所在文件夹小编给大家分享一下VBS如何打开当前脚本所在文件夹,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!方法一:W

    攻略 2021年11月1日
  • tomcat环境变量正确无法启动(eclipse启动tomcat拒绝访问)

    技术如何解决eclipse配置Tomcat和Tomcat出现无效端口问题小编给大家分享一下如何解决eclipse配置Tomcat和Tomcat出现无效端口问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,

    攻略 2021年12月16日
  • IDEA设置Maven

    技术IDEA设置Maven IDEA设置Maven1,在idea中设置maven,让idea和maven结合使用idea中内置了maven,一般不使用内置,因为用内置修改maven的设置不方便使用自己安

    礼包 2021年11月18日
  • 手机分屏怎么弄,手机分屏模式怎么切换两面全屏

    技术手机分屏怎么弄,手机分屏模式怎么切换两面全屏方法/步骤分步阅读1/5
    分屏切换为全屏
    点击分屏线中间的按钮手机分屏怎么弄,向上或向下滑动,即可将想放大的界面变成全屏。
    2
    /5
    互换分屏位置
    点击分屏线中间的按钮,点

    生活 2021年10月27日