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

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

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

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

相关推荐

  • 入门web前端开发必须知道的开发工具有哪些

    技术入门web前端开发必须知道的开发工具有哪些这篇文章主要介绍“入门web前端开发必须知道的开发工具有哪些”,在日常操作中,相信很多人在入门web前端开发必须知道的开发工具有哪些问题上存在疑惑,小编查阅了各式资料,整理出

    攻略 2021年11月5日
  • Idea下仓库初始化与文件提交涉及到的基本命令有哪些

    技术Idea下仓库初始化与文件提交涉及到的基本命令有哪些小编给大家分享一下Idea下仓库初始化与文件提交涉及到的基本命令有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、Idea下仓库初始化与文件

    攻略 2021年12月9日
  • 怎么解决MySQL的[ERROR] InnoDB: ./ibdata1 can't be opened in read-write mode问题

    技术怎么解决MySQL的[ERROR] InnoDB: ./ibdata1 cant be opened in read-write mode问题本篇内容主要讲解“怎么解决MySQL的[ERROR] InnoDB: ./

    攻略 2021年11月19日
  • Spring源码中的配置文件分析

    技术Spring源码中的配置文件分析本篇内容介绍了“Spring源码中的配置文件分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够

    攻略 2021年11月15日
  • Spark 2.3.1当Kafka 0.9使用Direct模式异常消耗信息时会发生什么?

    技术Spark2.3.1+Kafka0.9使用Direct模式消费信息异常怎么办Spark2.3.1+Kafka0.9使用Direct模式消费信息异常怎么办,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因

    攻略 2021年12月15日
  • PDO连接数据库

    技术PDO连接数据库 PDO连接数据库上一篇文章为您介绍了“PHP数据库如何使用PDO连接数据库”在PHP中,为您详细地介绍了如何通过PDO连接数据库,这篇文章让您继续了解PHP中如何使用PDO执行SQ

    礼包 2021年10月28日