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

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

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

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

相关推荐

  • sqlite select语句(sql中select的功能)

    技术SQLite中的SELECT子句如何使用表达式这篇文章将为大家详细讲解有关SQLite中的SELECT子句如何使用表达式,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。SQLite中

    攻略 2021年12月18日
  • 怎样写一个时间序列数据库

    技术怎样写一个时间序列数据库怎样写一个时间序列数据库,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在 Prometheus 上,监控系统包含

    攻略 2021年12月2日
  • 抖音刷粉后果,抖音刷粉丝专业讲解?

    技术抖音刷粉后果,抖音刷粉丝专业讲解?抖音怎么刷粉丝?想要抖音刷粉的小伙伴都会有个疑惑,那就是抖音刷粉后果会严重不?因为抖音公告上有说不允许通过刷粉的方式增加粉丝的,所以大家就比较担心这个抖音刷粉刷赞被发现后果严重不严重

    测评 2021年10月19日
  • 如何理解互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景

    技术如何理解互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景本篇内容主要讲解“如何理解互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家

    攻略 2021年10月22日
  • your的名词性物主代词,your的名词性物主代词

    技术your的名词性物主代词,your的名词性物主代词形容词性物主代词:   单数形式:my(我的)your的名词性物主代词,your(你的),his/her/its(他的、她的、它的)。  复数形式:our(我们的),

    2021年10月23日
  • CSS代码重构与优化的方法有哪些

    技术CSS代码重构与优化的方法有哪些本篇内容主要讲解“CSS代码重构与优化的方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“CSS代码重构与优化的方法有哪些”吧!CS

    攻略 2021年12月10日