Google云计算原理与应用(四)

目录

    • 七、海量数据的交互式分析工具Dremel
      • (一)产生背景
      • (二)数据模型
      • (三)嵌套式的列存储
      • (四)查询语言与执行
      • (五)性能分析
      • (六)小结
    • 八、内存大数据分析系统PowerDrill
      • (一)产生背景与设计目标
      • (二)基本数据结构
      • (三)性能优化
      • (四)性能分析与对比
    • 九、Google应用程序引擎
      • (一)Google App Engine简介
      • (二)应用程序环境
      • (三)Google App Engine服务


七、海量数据的交互式分析工具Dremel

在这里插入图片描述

(一)产生背景

在这里插入图片描述
在这里插入图片描述
  Google 的团队结合其自身的实际需求,借鉴搜索引擎和并行数据库的一些技术,开发出了实时的交互式查询系统 Dremel。

Dremel支持的典型应用:

  • Web 文档的分析
  • Android 市场的应用安装数据的跟踪
  • Google 产品的错误报告
  • Google 图书的光学字符识别
  • 欺诈信息的分析
  • Google 地图的调试
  • Bigtable 实例上的 tablet 迁移
  • Google 分布式构建系统的测试结果分析
  • 磁盘 I/O 信息的统计
  • Google 数据中心上运行任务的资源监控
  • Google 代码库的符号和依赖关系分析

(二)数据模型

两方面的技术支撑:

一方面:统一的存储平台

  实现高效的数据存储,Dremel使用的底层数据存储平台是GFS。

另一方面:统一的数据存储格式

  存储的数据才可以被不同的平台所使用。

面向记录和面向列的存储:

  Google 的 Dremel 是第一个在嵌套数据模型基础上实现列存储的系统。

在这里插入图片描述

  • 好处一:处理时只需要使用涉及的列数据
  • 好处二:列存储更利于数据的压缩

嵌套模型的形式化定义:

τ = d o m ∣ ⟨ A 1 : τ [ ∗ ∣ ? ] , … , A n : τ [ ∗ ∣ ? ] ⟩ τ=dom|⟨A_{1}:τ[*|?],…,A_{n}:τ[*|?]⟩ τ=domA1:τ[?],,An:τ[?]⟩

原子类型(Atomic Type): 原子类型允许的取值类型包括整型、浮点型、字符串等。

记录类型(Record Type): 记录类型则可以包含多个域。记录型数据包括三种类型:必须的(Required)、可重复的(Repeated)以及可选的(Optional)。

嵌套结构的模式和实例:

在这里插入图片描述
  文档的模式(Schema)定义,利用该数据模型,可以使用 Java 语言,也可以使用 C++ 语言来处理数据,甚至可以用 Java 编写的 MapReduce 程序直接处理 C++ 语言产生的数据集。这种跨平台的优良特性正是 Google 所需要的。

(三)嵌套式的列存储

1、数据结构的无损表示

  如下图示,带有重复深度和定义深度的r1与r2的列存储。

在这里插入图片描述
  重复深度主要关注的是可重复类型,而定义深度同时关注可重复类型和可选类型(optional)。每一列最终会被存储为块(Block)的集合,每个块包含重复深度和定义深度且包含字段值。

2、高效的数据编码

  Dremel 利用图中算法创建一个树状结构,树的节点为字段的 writer,它的结构与模式中的字段层级匹配。核心的想法是只在字段 writer 有自己的数据时执行更新,非绝对必要时不尝试往下传递父节点状态。子节点 writer 继承父节点的深度值。当任意值被添加时,子 writer 将深度值同步到父节点。

  下图是计算重复和定义深度的基础算法。

在这里插入图片描述
3、数据重组

  Dremel 数据重组方法的核心思想是为每个字段创建一个有限状态机(FSM),读取字段值和重复深度,然后顺序地将值添加到输出结果上。

在这里插入图片描述

当前FSM写入值下一个重复深度值动作
DocId(开始)100跳转至Links.Backward
Links.BackwardNULL0跳转至Links.Forward
Links.Forward201停留在Links.Forward
Links.Forward401停留在Links.Forward
Links.Forward600跳转至Name.Language.Code
Name.Language.Codeen-us2跳转至Name.Language.Country
Name.Language.Countryus2跳转至Name.Language.Code
Name.Language.Codeen1跳转至Name.Language.Country
Name.Language.CountryNULL1跳转至Name.Url
Name.Urlhttp://A1跳转至Name.Language.Code
Name.Language.CodeNULL1跳转至Name.Language.Country
Name.Language.CountryNULL1跳转至Name.Url
Name.Urlhttp://B1跳转至Name.Language.Code
Name.Language.Codeen-gb0跳转至Name.Language.Country
Name.Language.Countrygb0跳转至Name.Url
Name.UrlNULL0结束

  如果具体的查询中不是涉及所有列,而是仅涉及很少的列的话,上述数据重组的过程会更加便利,下图中仅仅涉及 DocId 和 Name.Language.Country 的有限状态机。

在这里插入图片描述
核心的思想如下:

  设置t为当前字段读取器的当前值f所返回的下一个重复深度。在模式树中,找到它在深度 t 的祖先,然后选择该祖先节点的第一个叶子字段 n。由此得到一个 FSM 状态变化 (f,t)->n。

在这里插入图片描述

有限状态机的构造算法

(四)查询语言与执行

  Dremel 的 SQL 查询输入的是一个或多个嵌套结构的表以及相应的模式,而输出的结果是一个嵌套结构的表以及相应的模式。

在这里插入图片描述
  Dremel 的类 SQL 语言支持嵌套子查询、记录内聚合、top-k、joins、自定义函数等操作类型。

  Dremel 利用多层级服务树(multi-level service tree)的概念来执行查询操作。

  • 根服务器:接受客户端发出的请求,读取相应的元数据,将请求转发至中间服务器。
  • 中间服务器:负责查询中间结果的聚集。
  • 叶子服务器:负责执行数据来源。

在这里插入图片描述
  Dremel 中的数据都是分布式存储的,因此每一层查询涉及的数据实际都被水平划分后存储在多个服务器上。Dremel 是一个多用户系统,因此同一时刻往往会有多个用户进行查询。查询分发器有一个很重要参数,它表示在返回结果之前一定要扫描百分之多少的 tablet。

(五)性能分析

  由于 Dremel 并不开源,我们只能通过 Google 论文中的分析大致了解其性能。Google 的实验数据集规模如下图:

在这里插入图片描述
  MR 从面向记录转换到列状存储后性能提升了一个数量级(从小时到分钟),而使用 Dremel 则又提升了一个数量级(从分钟到秒)。

在这里插入图片描述

(六)小结

  1. Dremel 和 MapReduce 并不是互相替代,而是相互补充的技术。在不同的应用场景下各有其用武之地。
  2. Drill 的设计目标就是复制一个开源的 Dremel,但是从目前来看,该项目无论是进展还是影响力都达不到 Hadoop 的高度。
  3. 希望未来能出现一个真正有影响力的开源系统实现 Dremel 的主要功能并被广泛采用。

八、内存大数据分析系统PowerDrill

(一)产生背景与设计目标

两个假设结论:

(1)绝大多数的查询是类似和一致的;
(2)存储系统中的表只有一小部分是经常被使用的,绝大部分的表使用频率不高。

考虑两方面的内容:

(1)如何尽可能在查询中略去不需要的数据分块;
(2)如何尽可能地减少数据在内存中的占用,占用越少意味着越多的数据可以被 加载进内存中处理。

PowerDrill整个系统实际分为三个部分:

(1)Web UI
(2)一个抽象层
(3)列式存储

(二)基本数据结构

  下图阐述了 PowerDrill 采用的数据结构,简单来说就是一个双层数据字典结构。

在这里插入图片描述

  • 全局字典表:存储全局id和搜索关键字的对应关系
  • 3个块的数据:块字典记录的是块 id(chunk-id)和全局 id 的映射关系;块元素记录的是块中存储数据的块 id(注意不是全局id)。

(三)性能优化

1、数据分块

(1)背景

  传统的索引对于 PowerDrill 的查询场景作用不是很大,因此一个很自然的考虑就是对数据进行分块,过滤查询中不需要的数据块来减少数据量。

(2)方法

  常见的分区方法有范围分区、散列分区等。PowerDrill 实际采用的是一种组合范围分区方法。

(3)步骤

  领域专家确定若干个划分的域 → 利用这几个域对数据进行划分 → 每个块的行数达到阈值时就停止划分。

(4)局限

  PowerDrill 采用的数据分块方法简单实用,但是由于域的确定需要领域专家,因此这种方法在实际使用中还有一定的局限性。

2、数据编码的优化

  • 对于不同的块,如果我们可以确定块中不同值的数量,那么就可以根据这个数量值来选择可变的比特位来记录块 id。
  • 统计一组数中不同值的个数有一个专有名词,称为 “基数估计”。
  • 对于小规模的数据集,可以比较容易地统计出精确的基数。但是在大数据的环境下,精确的基数统计非常耗时,因此能保证一定精度的基数估计就可以满足实际的需求。
  • 基数估计的方法很多,大多利用了散列函数的一些特性,Google 内部使用的是一种称为 Hyperloglog 的基数估计方法的变种。

3、全局字典优化

优化中主要利用两个特性:

(1)全局字典是有序的
(2)排序后的数据常常有共同的前缀

  实际使用中为了进一步减少查询中需要加载到内存的全局字典,对全局字典又进行了分块。对每个全局字典块还会维护一个布隆过滤器(bloom filter)来快速确定某个值是否在字典中。

4、压缩算法

  Google 曾经对一些主流的压缩算法做过简单的测试,如下图:

在这里插入图片描述

  • 不管压缩算法的解压速度多快,总会消耗一定的物理资源与时间。对此PowerDrill采用了一种冷热数据分别对待的策略。
  • 在冷热数据切换策略中,比较常用的是LRU算法。PowerDrill开发团队采用了启发式的缓存策略来代替原始的LRU算法。

5、行的重排

  数据压缩的算法有很多,比较常用的一种称为游程编码(Run-Length Encoding,RLE),又称行程长度编码,其好处是压缩和解压缩都非常快。

  数据重排的过程等效于著名的 TSP(旅行商)问题。两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数。PowerDrill 在实际生产环境中对数据分块时选定的那几个域按照字典序进行排序来得到重排的结果。

在这里插入图片描述

(四)性能分析与对比

我们比较关注的两组数据:

(1)在查询过程中,平均92.41%的数据被略去,5.02%的数据会直接被缓存命中,一般仅须扫描2.66%的数据即可得到查询结果。
(2)超过70%的查询是不需要从磁盘访问任何数据的,这些查询的平均访问延迟大约是25,96.5%的查询需要访问的磁盘量不超过1GB。

在这里插入图片描述
性能分析与对比:

在这里插入图片描述
PowerDrill与Dremel的对比:

PowerDrillDremel
设计目标处理非常大量的数据集分析少量的核心数据集
设计理念处理的数据来自外存处理的数据尽可能地存于内存
未进行数据分区,分析时要扫描所有需要的列使用了组合范围分区,分析时可以跳过很多不需要的分区
数据通常不需要加载,增加数据很方便数据需要加载,增加数据相对不便

九、Google应用程序引擎

(一)Google App Engine简介

什么是 Google App Engine:

  Google App Engine是一个由 Python 应用服务器群、Bigtable 数据库及 GFS 数据存储服务组成的平台,它能为开发者提供一体化的可自动升级的在线应用服务。

在这里插入图片描述

  • Google App Engine 可以让开发人员在 Google 的基础架构上运行网络应用程序。
  • 在 Google App Engine 中,用户可以使用 appspot.com 域上的免费域名为应用程序提供服务,也可以使用 Google 企业应用套件从自己的域为它提供服务。
  • 可以免费使用 Google App Engine。注册一个免费账户即可开发和发布应用程序,而且不需要承担任何费用和责任。

Google App Engine的整体架构:

在这里插入图片描述

  • 应用管理节点 :主要负责应用的启停和计费。
  • 前端和静态文件 :负责将请求转发给应用服务器并进行负载均衡和静态文件的传输。
  • 应用服务器 :能同时运行多个应用的运行时(Runtime)。
  • 服务器群 :提供了一些服务,主要有Memcache、Images、URLfetch、E-mail和Data Store等。

(二)应用程序环境

应用程序环境的特性:

(1)动态网络服务功能。能够完全支持常用的网络技术。
(2)具有持久存储的空间。在这个空间里平台可以支持一些基本操作,如查询、分类和事务的操作。
(3)具有自主平衡网络和系统的负载、自动进行扩展的功能。
(4)可以对用户的身份进行验证,并且支持使用 Google 账户发送邮件。
(5)有一个功能完整的本地开发环境,可以在自身的计算机上模拟 Google App Engine 环境。
(6)支持在指定时间或定期触发事件的计划任务。

沙盒的限制:

(1)用户的应用程序只能通过 Google App Engine 提供的网址抓取 API 和电子邮件服务 API 来访问互联网中其他的计算机,其他计算机如请求与该应用程序相连接,只能在标准接口上通过 HTTP 或 HTTPS 进行。
(2)应用程序无法对 Google App Engine 的文件系统进行写入操作,只能读取应用程序代码上的文件,并且该应用程序必须使用 Google App Engine 的 Data Store 数据库来存储应用程序运行期间持续存在的数据。
(3)应用程序只有在响应网络请求时才运行,并且这个响应时间必须极短,在几秒之内必须完成。与此同时,请求处理的程序不能在自己的响应发送后产生子进程或执行代码。

(三)Google App Engine服务

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/475082.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一款简单易学能快速上手的php开源代码,从创建一个网站开始学习

简单易学能快速上手的php开源代码从建站源码开始 学习PHP建站,php语法、逻辑、判断、调用数据等操作类型) 此开源代码选择了比较成熟的ThinkPHP框架开发并遵循Apache2开源许可协议发布,拥有快速、简单的面向对象的轻量级PHP开发框架&#xff…

【重制版】ICML 2023 | 时间序列(Time Series)和时空数据(Spatial-Temporal)论文总结

2023ICML(International Conference on Machine Learning,国际机器学习会议)在2023年7月23日-29日在美国夏威夷举行。2023年ICML 共收到 6538 份投稿,其中 1827 份被接收,接收率约为 27.9%。(好像ICML24要开…

【Java11下载、安装、部署指南】

oracle jdk11下载 oracle jdk所有版本归档【archive】下载地址: https://www.oracle.com/java/technologies/downloads/archive/ oracle jdk11下载地址: https://www.oracle.com/java/technologies/javase/jdk11-archive-downloads.html 配置或修改wi…

如何配置VS Code环境

一、下载 Visual Studio Code - Code Editing. Redefined 二、傻瓜式安装 如果出现没有安装路径选择,则看下面图片 经过上面操作后,可以修改路径 三、按照下面步骤配置环境变量即可 Visual Studio Code 中的 C 和 MinGW-w64 入门

【C语言】函数atoi的详解与实现~

一、atoi函数的讲解 函数声明&#xff1a;int atoi( const char *string );头 文 件 &#xff1a;<stdlib.h>函数功能&#xff1a;对指针string所指向的字符串&#xff0c;将其中的一段连续的(0~9)数字按照( int )返回&#xff1b;函数特点&#xff1a;&#xff08;这里…

中欧企业家东湖对话活动在武汉举行

新华社客户端武汉3月20日电&#xff08;记者喻珮&#xff09;中欧企业家东湖对话活动20日在武汉举行。法国道达尔能源、马赛港&#xff0c;德国克诺尔集团、CHI集团&#xff0c;长江产投、湖北机场集团、东风集团&#xff0c;中国国际经济交流中心等百余家中欧知名企业及机构代…

【Mock|JS】Mock的get传参+获取参数信息

mockjs的get传参 前端请求 const { data } await axios("/video/childcomments", {params: {sort: 1,start: 2,count: 5,childCount: 6,commenIndex: 0,},});使用正则匹配url /*** # 根据url获取query参数* param {Url} urlStr get请求获取参数 eg:"/video/c…

C语言每日一题06

一、题目 二、解析 void main &#xff08;&#xff09; { char c1&#xff0c;c2&#xff1b; int a1&#xff0c;a2&#xff1b; c1 getchar &#xff08;&#xff09;&#xff1b;//读取第一个输入&#xff0c;c11 scanf &#xff08;“%3d”&#xff0c;&a1&#xff…

Whisper-AT:一个统一语音识别和音频标签的模型

公众号/视频号/小红书/微博 &#xff1a;人工智能技术派 人工智能技术派(AITECH)成员&#xff1a;hws ⎣语音大模型⎤Whisper-AT: Noise-Robust Automatic Speech Recognizers are Also Strong General Audio Event Taggers 背景介绍 Whisper模型使用了从互联网收集的680,000小…

SpringCloudAlibaba系列之Seata实战

目录 环境准备 1.下载seata安装包 2.修改配置文件 3.准备seata所需配置文件 4.初始化seata所需数据库 5.运行seata 服务准备 分布式事务测试 环境准备 1.下载seata安装包 Seata-Server下载 | Apache Seata 本地环境我们选择稳定版的二进制下载。 下载之后解压到指定目录…

B004-springcloud alibaba 服务容错 Sentinel

目录 高并发带来的问题服务雪崩效应常见容错方案常见的容错思路隔离超时限流熔断降级 常见的容错组件 Sentinel入门什么是Sentinel微服务项目集成Sentinel核心库安装Sentinel控制台实现一个接口的限流 Sentinel的概念和功能基本概念重要功能 Sentinel规则流控规则三种流控模式三…

使用Pygame做一个乒乓球游戏

项目介绍 使用Pygame做一个乒乓球游戏。左侧为电脑&#xff0c;右侧为玩家。 视频地址-YT 视频搬运-B站 视频教程约90分钟。 代码地址 环境&#xff1a;需要pygame库&#xff0c;可用pip安装&#xff1a;pip install pygame 1. 基础版本 首先进行一些初始化&#xff0c;初始…

Redis相关操作大全一篇全搞定

Redis是单线程吗? Redis 的单线程主要是指 Redis 的网络 10 和键值对读写是由一个线程来完成的&#xff0c;这也是 Redis 对外提供键值存储服务的主要流程。但Redis 的其他功能&#xff0c;比如持久化、异步删除、集群数据同步等&#xff0c;其实是由额外的线程执行的。 Redi…

怎么在Linux系统下Docker部署Excalidraw白板工具并实现无公网IP远程访问?

文章目录 1. 安装Docker2. 使用Docker拉取Excalidraw镜像3. 创建并启动Excalidraw容器4. 本地连接测试5. 公网远程访问本地Excalidraw5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定公网地址远程访问 本文主要介绍如何在Ubuntu系统使用Docker部署开源白板工具Excal…

如何在CentOS搭建docker compose ui可视化工具并无公网IP远程管理容器

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

CSS隐藏video标签中各种控件

1.edio标签加上controls会出现视频控件&#xff0c;如播放按钮、进度条、全屏、观看的当前时间、剩余时间、音量按钮、音量的控制条等等 <video type"video/mp4" src"" autoplay"" style"width: 400px; height: 300px;" id"e…

刚进公司第一天-电脑环境搭建

写在前面 之前在公司做过一次开发小工具的分享&#xff0c;这两天有个同事找我学习一些小工具开发的知识&#xff0c;但是我发现他的基础是真的差&#xff0c;想学开发知识却连自己本地电脑环境都没弄好&#xff0c;确实&#xff0c;有些人工作了很久&#xff0c;由于自己工作中…

【笔记】网络安全相关法规学习(网络安全法、数据安全法、个人信息保护法)

文章目录 1. 作业及Presentation2. 国家主权基本要素、基本权利、基本原则3. 网络空间主权基本要素、基本权利、基本原则4. 网络安全法、数据安全法、个人信息保护法中的用语定义4.1 网安法用语定义4.2 数据安全法用语4.3 个人信息法用语4.4 法、条例等的区别 5. 网络安全法各条…

【Greenhills】GHS-MULTI IDE-Ubuntu纯命令系统部署license文件

【更多软件使用问题请点击亿道电子官方网站查询】 1、 文档目标 记录在Ubuntu纯命令系统中部署license文件的步骤。 2、 问题场景 客户服务器为Linux纯命令行的环境&#xff0c;客户也无其他服务器可以部署&#xff0c;需在纯命令行上尝试安装。 3、软硬件环境 1&#xff09…

三种方式,浅谈 Cocos Creator 的动画添加

前言 虽然 Cocos 的官方文档对动画系统做了较详细的介绍&#xff0c;但是对于刚接触的同学&#xff08;比如我&#xff09;来说还是不太友好。尽管如此&#xff0c;我就按文档加社区帖子一起实践了一下。为了方便忘记后能快速捡起&#xff0c;所以就用我的方式结合使用场景&am…