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服务

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网络原理】HTTP 请求 (Request)详解

文章目录 🎍请求格式🎄认识URL🌸query string🌸关于 URL encode 🍀认识 “方法” (method)🌸GET方法🌸POST 方法🌸GET 和 POST 的区别 🌲认识请求 “报头” (header)&…

管理能力学习笔记一:角色转身

管理能力学习是为了解决角色转身后面临的更多更复杂的的问题。初晋管理层,需要转变工作习惯,学会分配时间。 角色转身 建立“授权”意识 通过匹配工作内容与下属员工能力,分配工作,避免陷入下属能力不足 -> 不愿授权 -> 下…

MS08-067 漏洞利用与安全加固

文章目录 环境说明1 MS08_067 简介2 MS08_067 复现过程3 MS08_067 安全加固 环境说明 渗透机操作系统:2024.1漏洞复现操作系统: Windows XP Professional with Service Pack 2- VL (English)安全加固复现操作系统:Windows XP Professional with Service …

Docusaurus和HelpLook:谁更适合做知识库管理

在当今信息化时代,企业建立和维护一个好用、高效、能持续更新的知识库,对内部沟通、团队合作和客户服务都很重要。Docusaurus和HelpLook都是很好的知识库管理工具,但它们的功能和优势各有不同。跟着我一起深入了解两个工具之间的优劣&#xf…

Web框架开发-开发图书管理页面

一、项目需求1.列出图书列表、出版社列表、作者列表2.点击作者,会列出其出版的图书列表3.点击出版社,会列出旗下图书列表4.可以创建、修改、删除 图书、作者、出版社二、项目实现 bookms |-- app01 # 项目应用 | |-- views.py # 视图层代码 | |-- admin.py | |-- app…

launchctl及其配置、使用、示例

文章目录 launchctl 是什么Unix / Linux类似的工具有什么哪个更常用配置使用常用子命令示例加载一个 launch agent:卸载一个 launch daemon:列出所有已加载的服务:启动一个服务:停止一个服务:禁用一个服务:启用一个服务: 附com.example.myagent.plist内容有趣的例子参考 launch…

HuggingChat

HuggingChat 文章目录 HuggingChat一、关于 HuggingChat二、ChatLogin进入对话首页对话 三、Assistants1、使用2、创建新的助理 一、关于 HuggingChat HuggingFace 发布的 Chat 工具 网站:https://huggingface.co/chat/chat-ui space : https://huggingface.co/sp…

探讨苹果 Vision Pro 的空间视频(术语辨析、关键技术、思考)

背景:一位资深视频技术从业者在 Pixvana 工作,积累了丰富的捕获、处理、编码、流传和播放空间媒体经验。 一、术语 空间视频:传统的 3D 视频,呈矩形,包含左右眼视图,如 iPhone15 Pro 和 Vision Pro 可录制。沉浸式视频:非矩形的环绕式视频体验,通常由两个或多个传感器…

深化涉案企业合规改革:从治标到治本的必由之路

在市场经济的大潮中,企业作为经济发展的主体,其健康运行对整个社会的稳定与繁荣至关重要。然而,随着经济全球化的加速和市场竞争的激烈,一些企业在追求利润最大化的过程中,可能会忽视法律法规,甚至触犯法律…

H6603实地架构降压芯片100V耐压 80V 72V 60V 48V单片机/模块供电应用

H6603 是一款内置功率 MOSFET降压开关转换器。在宽输入范围内,其最大持续输出电流 0.8A,具有极好的负载和线性调整率。电流控制模式提供了快速瞬态响应,并使环路更易稳定。故障保护包括逐周期限流保护和过温保护。H6603 最大限度地减少了现有…

五、保持长期高效的七个法则(二)Rules for Staying Productive Long-Term(1)

For instance - lets say youre a writer.You have a bunch of tasks on your plate for the day, but all of a sudden you get a really good idea for an essay. You should probably start writing now or youll lose your train of thought.What should you do? 举例来说…

C#,精巧实用的代码,调用GDI32.DLL绘制图形的源程序

C#画图既可以使用 System.Drawing 命名空间的各种基础类。在某些情况下,也可以直接调用 Windows 的公共基础链接库 GDI32.DLL。 1 GDI32.DLL图形设备接口 意图 Microsoft Windows图形设备界面(GDI)使应用程序能够在视频显示器和打印机上使用图形和格式化文本。基于Window…

Sora底层技术原理:Stable Diffusion运行原理

AIGC 热潮正猛烈地席卷开来,可以说 Stable Diffusion 开源发布把 AI 图像生成提高了全新高度,特别是 ControlNet 和 T2I-Adapter 控制模块的提出进一步提高生成可控性,也在逐渐改变一部分行业的生产模式。惊艳其出色表现,也不禁好…

使用Python进行自然语言处理(NLP):NLTK与Spacy的比较【第133篇—NLTK与Spacy】

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 使用Python进行自然语言处理(NLP):NLTK与Spacy的比较 自…

【ubuntu20.04+tensorflow-gpu1.14配置】

ubuntu20.04tensorflow-gpu1.14配置 目录0. 版本注意事项说明1. 个人目录下载后配置系统环境变量2. anaconda配置所有环境(推荐)3. 验证tensorflow-gpu4. 一些细节 目录 总结出两种方法 个人目录 下载cuda和cudnnanaconda虚拟环境 下载cudatoolkit和cu…

Unity游戏项目接广告

Unity游戏项目中接入GoogleAdMob 先看效果图 接入测试横幅广告,代码如下: using System.Collections; using System.Collections.Generic; using UnityEngine; using GoogleMobileAds.Api; using System;public class GoogleAdMobManager : MonoBehavi…

【鸿蒙HarmonyOS开发笔记】应用数据持久化之通过用户首选项实现数据持久化

概述 应用数据持久化,是指应用将内存中的数据通过文件或数据库的形式保存到设备上。内存中的数据形态通常是任意的数据结构或数据对象,存储介质上的数据形态可能是文本、数据库、二进制文件等。 HarmonyOS标准系统支持典型的存储数据形态,包…

如何配置VS Code环境

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

信雅纳400/800G网络测试仪之 CDF/ Extended Payload 功能:完全用户自定义的协议报文支持/可编程的协议内容支持

Note# 2024-3-21 今天被一个做芯片测试的客户追着问,应该合作在测试仪上做完全自定义的报文,添加自己的私有协议进去,他觉得每次都导入报头太麻烦了,然后就看了下Application Note关于CDF功能的描述,照着机翻的版本来…

D55125ADA A型漏电保护芯片,适用于 110V⁓220V(50/60Hz)电压,可应用于 新能源充电桩(充电枪)、智能空开(智能微断开关)等工业产品

一、应用领域 新能源充电桩(充电枪)、智能空开(智能微断开关)等工业产品,以及电热水器、电烤箱、电烤炉等小家电产品。 二、功能介绍 D55125ADA 是一款高性能 CMOS 漏电保护器专用电路。芯片内部包含稳压电源、放大电路…