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

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

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

与以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)

相关推荐

  • 月亮思乡的古诗,关于月亮思乡的古诗大全

    技术月亮思乡的古诗,关于月亮思乡的古诗大全【古朗月行】李白小时不识月,呼作白玉盘.又疑瑶台镜,飞在白云端.仙人垂两足,桂树作团团.白兔捣药成,问言与谁餐.
    蟾蜍蚀圆影,大明夜已残.羿昔落九乌,天人清且安.
    阴精此沦惑,去

    生活 2021年10月22日
  • Ubuntu14.04 Caffe如何安装

    技术Ubuntu14.04 Caffe如何安装这篇文章将为大家详细讲解有关Ubuntu14.04 Caffe如何安装,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Caffe简介Caff

    攻略 2021年11月15日
  • 什么叫奇数什么叫偶数,合数、质数、偶数、奇数怎么分辨

    技术什么叫奇数什么叫偶数,合数、质数、偶数、奇数怎么分辨质数与合数,是从约数的个数进行区别的,一个大于1的整数,如果只有1和它本身两个约数,那么这个数就叫做质数什么叫奇数什么叫偶数;如果除了1和它本身还有其它的约数,这个

    生活 2021年10月23日
  • 好用的Redis可视化工具有哪些

    技术好用的Redis可视化工具有哪些这篇文章主要为大家展示了“好用的Redis可视化工具有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“好用的Redis可视化工具有哪些”

    攻略 2021年12月3日
  • k8s百度百科(k8的特征)

    技术k8s的本质是什么这篇文章给大家介绍k8s的本质是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。当下 k8s 算是比较火的一个内容,那么它到底是什么呢,它为什么会这么火呢,它解决的是什么问题

    攻略 2021年12月15日
  • Linq-Include

    技术Linq-Include Linq-IncludeLINQ中的Include()有什么作用我尝试进行了大量研究,但我更像是数据库专家-因此,即使MSDN中的解释对我也没有任何意义.有人可以解释一下,

    礼包 2021年12月3日