首页 热门物流资讯 万字长文揭秘:阿里怎么完成海量数据实时剖析?

万字长文揭秘:阿里怎么完成海量数据实时剖析?

本文由阿里AnalyticDB团队出品,近万字长文,初次深度解读阿里在海量数据实时剖析范畴的多项核心技能。 应战 在线化和高可用,离线和在线的鸿沟越来越含糊,全部数据皆服务化、全部…

本文由阿里AnalyticDB团队出品,近万字长文,初次深度解读阿里在海量数据实时剖析范畴的多项核心技能。











应战


  • 在线化和高可用,离线和在线的鸿沟越来越含糊,全部数据皆服务化、全部剖析皆在线化。

  • 高并发低延时,越来越多的数据体系直接服务终端客户,对体系的并发和处理延时提出了新的交互性应战。

  • 混合负载, 一套实时剖析体系既要支撑数据加工处理,又要支撑高并发低延时的交互式查询。

  • 交融剖析, 跟着对数据新的运用方法探究,需求处理结构化与非结构化数据交融场景下的数据检索和剖析问题。

阿里巴巴开端经过单节点Oracle进行准实时剖析, 后来转到Oracle RAC,跟着事务的飞速开展, 集中式的Shared Storage架构需求快速转向散布式,搬迁到了Greenplum,但不到一年时刻便遇到扩展性和并发的严峻瓶颈。为了迎候更大数据集、更高并发、更高可用、更实时的数据运用开展趋势,从2011年开端,在线剖析这个技能范畴,阿里实时数仓坚决的走上了自研之路。

 







剖析型数据库AnalyticDB




全体架构

经过曩昔2年的架构演进和功用迭代,AnalyticDB当时全体架构如下图。

下面是对每个模块的详细描绘:

DB等级服务组件:

  • Compute Node: 包含MPP核算Worker模块,和存储模块(队伍混存,元数据,索引)。

  • Buffer Node: 担任实时写入,并依据实时数据巨细触发索引构建和兼并。

  • Management Console: 办理控制台。

  • Global Meta Service:大局元数据办理,供给每个DB的元数据办理服务,一起供给分区分配,副本办理,版别办理,散布式DDL等才能。

  • Job Service:作业服务,供给异步作业调度才能。异步作业包含索引构建、扩容、无缝晋级、删库删表的后台异步数据整理等。

  • Connector Service:数据源衔接服务,担任外部各数据源(图中右侧部分)接入到AnalyticDB。现在该服务开发基本完成,行将上线供给云服务。

  • Monitoring Alerting Service:监控告警确诊服务,既供给面向内部人员的运维监控告警确诊渠道,又作为数据源经过Management Console面向用户侧供给数据库监控服务。


数据模型

AnalyticDB中表组(Table Group)分为两类:现实表组和维度表组。

  • 现实表组(Fact Table Group),表组在AnalyticDB里是一个逻辑概念,用户能够将事务上相关性比较多的现实表放在同一个现实表组下,首要是为了便利客户做很多数据事务表的办理,一起还能够加快Co-location Join核算。

  • 维度表组(Dimension Table Group),用于寄存维度表,现在有且仅有一个,在数据库树立时会主动创立,维度表特征上是一种数据量较小可是需求和现实表进行潜在相关的表。

AnalyticDB中表分为现实表(Fact Table)和维度表(Dimension Table)。

现实表创立时至少要指定Hash分区列和相关分区信息,而且指定寄存在一个表组中,一起支撑List二级分区。

  • Hash Partition将数据依照分区列进行hash分区,hash分区被散布到多个Compute Node中。

  • List Partition(假如指定List分区列的话)对一个hash分区进行再分区,一般依照时刻(如每天一个list分区)。

  • 一个Hash Partition的一切List Partition默许寄存于同一个Compute Node中。每个Hash Partition配有多个副本(一般为双副本),散布在不同的Compute      Node中,做到高可用和高并发。

下图描绘了从Database到List分区到数据模型:

关于Compute Node 来说,现实表的每个List分区是一个物理存储单元(假如没有指定List分区列,能够为该Hash分区只要一个List分区)。一个分区物理存储单元选用队伍混存形式,合作元数据和索引,供给高效查询。


海量数据

根据上述数据模型,AnalyticDB供给了单库PB级数据实时剖析才能。以下是出产环境的实在数据:

  • 阿里巴巴集团某营销运用单DB表数超越20000张

  • 云上某企业客户单DB数据量近3PB,单日剖析查询次数超越1亿

  • 云上某事务实时写入压力高达1000w TPS

  • 菜鸟网络某数据事务极度杂乱剖析场景,查询QPS 100+







导入导出

灵敏的数据导入导出才能对一个实时数仓来说至关重要,AnalyticDB当时既支撑经过阿里云数据传输服务DTS、DataWorks数据集成从各种外部数据源导入入库,一起也在不断完善本身的数据导入才能。全体导入导出才能如下图(其间导入部分数据源当时已支撑,部分在开发中,行将发布)。

 







★ 

数据导入

首要,因为AnalyticDB兼容MySQL5.x系列,支撑经过MySQL JDBC方法把数据insert入库。为了取得最佳写入功能,AnalyticDB供给了Client SDK,完成分区聚合写的优化,比较经过JDBC单条insert,写入功能有10倍以上提高。关于运用端事务逻辑需求直接写入AnalyticDB的场景,引荐运用AnalyticDB Client SDK。



一起,关于快速上传本地结构化的文本文件,能够运用根据AnalyticDB Client SDK开发的Uploader东西。关于特别大的文件,能够拆分后运用uploader东西进行并行导入。

今天在阿里巴巴集团内,每天有数万张表从MaxCompute导入到AnalyticDB中进行在线剖析,其间很多导入使命单表数据巨细在TB级、数据量近千亿。


★ 

数据导出


核心技能


高功能SQL Parser

AnalyticDB经过数年的开展,语法解析器也阅历了屡次更新迭代。从前运用过业界干流的 Antlr(http://www.antlr.org),JavaCC(https://javacc.org)等Parser生成器作为SQL 语法解析器,可是两者在长时间、大规模、杂乱查询场景下,Parser的功能、语法兼容、API规划等方面不满足要求,所以咱们引入了自研的SQL Parser组件FastSQL。


★ 

抢先业界的Parser功能

AnalyticDB主打的场景是高并发、低延时的在线化剖析,对SQL Parser功能要求很高,批量实时写入等场景要求愈加严苛。FastSQL经过多种技能优化提高Parser功能,例如:

  • 快速比照:运用64位hash算法加快关键字匹配,运用fnv_1a_64 hash算法,在读取identifier的一起核算好hash值,并运用hash64低磕碰概率的特色,运用64位hash code直接比较,比惯例Lexer先读取identifier,在查找SymbolTable速度更快。

  • 高功能的数值Parser:Java自带的Integer.parseInt()/Float.parseFloat()需求结构字符串再做parse,FastSQL改善后能够直接在原文本上边读取边核算数值。

  • 分支猜测:在insert values中,呈现常量字面值的概率比呈现其他的token要高得多,经过分支猜测能够削减判别提高功能。

以TPC-DS99个Query比照来看,FastSQL比Antlr Parser(运用Antlr生成)均匀快20倍,比JSQLParser(运用JavaCC生成)均匀快30倍,在批量Insert场景、多列查询场景下,运用FastSQL后速度提高30~50倍。







★ 

无缝结合优化器

  • 常量折叠






    
      SELECT 
      * 
      FROM
      
         t1 t
      
    
      WHERE
      
         comm_week 
      
    
      
          
      
      BETWEEN
      
         CAST
      
      (
      
        date_format
      
      (
      
        date_add
      
      (
      'day'
      ,
      -
      
        day_of_week
      
      (
      '20180605'
      ),
    
      
                                     
      
      date
      (
      '20180605'
      )),
      '%Y%m%d'
      ) 
      AS 
      bigint
      )
    
      
                
      
      AND
      
         CAST
      
      (
      
        date_format
      
      (
      
        date_add
      
      (
      'day'
      ,
      -
      
        day_of_week
      
      (
      '20180605'
      )
    
      
                                    
      
      ,
      date
      (
      '20180605'
      )),
      '%Y%m%d'
      ) 
      AS 
      bigint
      )
    
      ------
    
      SELECT 
      * 
      FROM
      
         t1 t
      
    
      WHERE
      
         comm_week 
      
      BETWEEN
      20180602
      AND
      20180602
    





  • 函数改换:





    
      SELECT 
      * 
      FROM
      
         t1 t
      
      
      WHERE
      
         DATE_FORMAT
      
      (
      
        t
      
      .
      "pay_time"
      ,
      '%Y%m%d'
      )
      =
      '20180529'
    
      
            
      
      AND
      
         DATE_FORMAT
      
      (
      
        t
      
      .
      "pay_time"
      ,
      '%Y%m%d'
      )
      =
      '20180529'
    
      ------
    
      SELECT 
      * 
      FROM
      
         t1 t
      
    
      WHERE
      
         t
      
      .
      "pay_time"
      = 
      TIMESTAMP
      '2018-05-29 00:00:00'
    
      AND
      
         t
      
      .
      "pay_time"
       
      TIMESTAMP
      '2018-05-30 00:00:00'
    


  • 表达式转化:





    
      SELECT
      
         a
      
      ,
      
         b 
      
      FROM
      
         t1
      
    
      WHERE
      
         b 
      
      +
      1
      =
      10
      ;
    
      ------
    
      SELECT
      
         a
      
      ,
      
         b 
      
      FROM
      
         t1
      
    
      WHERE
      
         b 
      
      =
      9
      ;
    





  • 函数类型揣度:





    
      -- f3
      类型是
      TIMESTAMP
      类型
      
      SELECT
      
         concat
      
      (
      
        f3
      
      ,
      1
      )
    
      FROM
      
         nation
      
      ;
    
      ------
    
      SELECT

concat

(

CAST

(

f3

AS
CHAR
),
本文来自网络,不代表快递资讯网立场。转载请注明出处: http://www.llaiot.com/popular-logistics-information/2717.html
上一篇
下一篇

为您推荐

返回顶部