聊起 BigTable,让你不再胆怯

谷歌“三驾马车”的出现,才真正把我们带入了大数据时代,并指明了大数据的发展方向。

GFS 作为其中一驾宝车,解决了大数据存储的难题。它能够把大量廉价的普通机器,聚在一起,充分让每台廉价的机器发挥光和热。其中在《从谷歌 GFS 架构设计聊开去》中我们针对 GFS 进行了管中窥豹,体会到其中一斑,不得不说是人多力量大,团结就是力量的体现。

MapReduce 作为其中一座宝驾出现,主要解决海量数据计算的头痛难题。在《悟懂MapReduce,不纠结!》中我们引入一个接地气的“农村掰玉米”的案例进行了 MapReduce 思想的体会,大体意思是说, Map 就像人手掰一垅玉米(有个别生玉米+多数熟玉米),负责掰就行;Reduce 就像有专门收生玉米的;有专门收熟玉米的,然后各自进行汇总统计。

简单去讲,GFS 解决了分布式文件的存储,MapReduce 解决了海量数据的计算。

但是天生好奇,心生疑问“实时在线应用的海量结构化数据该如何存储呢?”那么不得不提及谷歌的第三驾马车“BigTable”。

背景?

众所周知,Google 要存储海量的网页,而且要能够存储一个 URL 的不同时期的多个版本的网页内容(因为网页会不断的更新,所以爬虫也要不断的针对同一个 URL 进行爬取)。

上图是摘自 BigTable 的论文,老图配新曲,在此处主要用来阐述 BigTable 产生的其中一个背景,从中我们能够得出如下公式。

com.cnn.www + contents: + t3 => html网页内容

com.cnn.www + contents: + t5 => html网页内容

com.cnn.www + contents: + t6 => html网页内容

那么 Google 就需要设计一款类似以“URL +  contents + time stamp”为 key,以“html 网页内容”为值的存储系统,于是就有了 BigTable 这个键值系统的存在。

是啥?

Bigtable is a distributed storage system for managing structured data that is designed to scale to a very large size: petabytes of data across thousands of commodity servers.

官方定义。Bigtable 是一个分布式的结构化数据存储系统,它被设计用来处理海量数据:通常是分布在数千台普通服务器上的 PB 级的数据。

说清楚 BigTable 存储啥样子?一段话(一箪食)

A Bigtable is a sparse, distributed, persistentmulti-dimensionalsorted map.The map is indexed by a row key, column key, and a timestamp;each value in the map is an uninterpreted array of bytes.

  • BigTable 是一个稀疏的、分布式的、持久化存储的多维度排序的 Map.(写过两天代码的都不陌生,Map 由 key 和 value 组成);
  • Map 的 key 是行关键字、列关键字以及时间戳组成;
  • Map 的 value 都是一个未经解析的 byte 数组。

看透彻 BigTable 存储啥样子?一张图(一瓢饮)

  • 可以看出 BigTable 用三维(row 行关键字、column 列关键字、time 时间戳)方式定位数据,也就是以“行关键字、列关键字、时间戳”为 key 来定位数据;
  • 我们也可以认为 BigTable 是属于 key-Value 的 NOSQL 数据库系列(为你在技术选型时再加一备选)。

一段话(一箪食)+ 一张图(一瓢饮) = BigTable(足矣)。

好了,到这应该对 BigTable 懵懵懂,如果感觉蒙圈、迷茫了,建议动动手指分享转发一下(言外之意:如果没看懂,就忽略此篇分享,莫要影响心情,因为愉悦的心情真的很重要!!!);如果感觉稍微有点意思或者豁然开朗,那就继续往下追。

设计?

默默跟随“一猿小讲”脚步的应该都清楚,GFS 也好、MapReduce 也罢,参与者角色都采取了简单就是美的大道至简的思想设计,都秉承了“一人掌权,其他人办事”的理念,那我们不妨看看 BigTable 背后是不是也是这样的设计呢?

BigTable 主要参与者:链接到客户程序中的库、一个 Master 服务器和多个 Tablet 服务器(这不就是咱们之前说 GFS 的皇上~宰相模式)。

Master服务器 (皇上)主要负责以下工作:

  • 为 Tablet 服务器分配 Tablets;
  • 检测新加入的或者过期失效的 Tablet 服务器;
  • 对 Tablet 服务器进行负载均衡;
  • 对保存在 GFS 上的文件进行垃圾收集;
  • 对模式的相关修改操作,例如建立表和列族。

Tablet服务器 (宰相)主要负责以下工作:

  • 管理一个 Tablet 的集合(通常每个服务器有大约数十个至上千个 Tablet);
  • 负责处理它所加载的 Tablet 的读写操作;
  • 负责在 Tablets 过大时,对其进行分割。

运转?

写操作。

  • Tablet 服务器首先检查这个操作格式是否正确、操作发起者是否有执行这个操作的权限;
  • 如果校验通过,将写请求提交到日志 tablet log;
  • 然后将数据写入内存中的 memtable;
  • 当 memtable 存到一定规模会被冻结,Bigtable 随之创建一个新的 memtable,并将冻结的 memtable 写入分布式文件系统 GFS。

读操作。

  • Tablet 服务器首先进行完整性和权限检查;
  • 然后将一系列 SSTable 和 memtable 的存储内容组成一个

    大的视图,然后从中进行读取。

设计要点:读也好,写也罢,客户程序其实直接和 Tablet 服务器通信进行读写操作,所以 Master 服务器的负载是很轻的。

技术栈?

BigTable 使用 Google 的分布式文件系统 GFS作为底层数据存储。

BigTable 内部存储数据的文件是 Google SSTable 格式的;(SSTable 是一个持久化的、排序的、不可更改的 Map 结构,点一首杨坤的“无所谓”送给你,该纠结时纠结,不该纠结时莫纠结,重要的是心情愉悦)。

BigTable 使用 Chubby 提供协同服务管理(若懵圈了,就想想 ZooKeeper)。

思考?

画龙画虎难画骨!目前的一切还是浮于表象,有没有更进一步的认识呢?那就让时间来告诉我们吧!

好了,这篇分享都到这儿吧,希望你们能够喜欢,如果感觉有点帮助,那就动动手指转发分享一下吧。

原文地址:https://www.cnblogs.com/socoool/p/12629751.html

时间: 2024-11-09 00:54:11

聊起 BigTable,让你不再胆怯的相关文章

2016年度工作总结

一想起来今天全办公室人都在写年终总结的场景,不由自主的笑开了颜,因为我把一名程序媛的年终总结硬生生的写成了一篇“散文”,而且还是很“冒牌”的总结,以下就是“散文版”的总结. 在紧锣密鼓的业务GO推广上线期间,钢谷电商的每一位成员也即将迎来2017年的伊始.回顾快要结束的2016年,满载的是大家的汗水和成果.至此,为了来年工作的更加完美以及给今年的工作画上圆满的句号,特此写下2016的年度总结以及2017年计划. 一. 柳暗花明又一村 3月初,跟着找工作的大潮,自己和同学们奔波于各个场合的招聘会,

架构师之路--怎样聊技术天,限流技术和各类编程语言

现在市面上的编程语言以面向对象为主流.面向对象先要从一些最基本的做起.比如我24岁就结婚了,不然怎么面向对象编程.然后刚结婚就生娃了,不然对象跑了咋办?new一个?创建销毁开销很大的,还是生个娃持续持有对象的引用的好. 为啥有些人开口说话能说很久,有些人说话有一搭没一搭的?据我观察发现,动手干活差不多的两个人,会说的将来发展的会更好.原因从具体实例来感受一下. 和朋友聊天,真的,好几年前人人网出来的总有点技术极客精神,聊天我们聊技术.人家问我你们视频是怎么存储怎么播放的.我说我就是做内容,met

架构师初码邀你—浅聊上云思路

架构师初码邀你-浅聊上云思路 话题发布专家:初码--资深程序员,初级架构师,知名博主 在实践中,无论是个人站长还是中小企业,选择云服务,都会遇到如何上云的问题,这个问题的详细描述就是,应该选择怎样一种迁移和部署到云服务上的方式并且应该使用哪些云服务?今天我们抛开具体的技术和语言不谈,就可能出现的架构方式简单的聊一聊,以我个人的经验来看,有较多的遇到过如下3种上云场景 一.傻瓜型: 在云服务时代前,但凡提到建站,多数所指即使用虚拟主机搭建一个内容管理网站或者论坛社区网站,操作者只需要知晓简单的虚拟

缩成一团将胆怯屈服

站在马路中央﹐车子从身旁蜂拥而过﹐影子无形的被掠夺﹐惟独靠近右手边的一颗心脏它还在跳动着﹐.仰望一种风景成风﹐追忆一种路过﹐委婉成客…    (1)﹕" ﹕手心向上﹐它对照着视线﹐是改变﹐手心向下﹐牵连着脚尖﹐是永远…"    时间很短﹐记忆倍显悠长﹐一辈子母亲走过了35年﹐她让记忆何止是离开之后的11年﹐有时候还遐想着﹐能够回到那年﹐她拽着我的手一笔笔的将字迹在田字格里规矩的描绘﹐有多﹐.能够在绿阴的操场上经疲力尽的跑到跌到﹐有多好…回不去人时光﹐一半清晰﹐一半以为是清晰的百事娃哈哈

致5年经验的IT人:从现在起,决定你未来高度的将不再是你的技术能力

你眼中的世界,一定是你心中想当然的世界.通过别人的眼睛看世界,才能够突破自己的思维模式, 前几天和朋友见面,聊起华为年初清理34岁以上职员及大龄程序员的话题,一致认为:技术人员一定不要因为工作忙.圈子窄而放弃了学习思考.开阔眼见.保持社交的机会.否则35多岁以后,很容易陷入技术人员大龄危机:技能不一定拼得过年轻人.常年专注技术视野没什么变化,从而竞争力大打折扣. 不要小觑这种现象,技术人员的对技术的偏执和热衷,会让他对很多在自己关注范围以外的信息熟视无睹,只习惯于关注自己在乎的部分,人对事物的认

Strophe.js连接XMPP服务器Openfire、Tigase实现Web私聊、群聊(MUC)

XMPP(Extensible Messaging and Presence Protocol)是一种网络即时通讯协议,它基于XML,具有很强的扩展性,被广泛使用在即时通讯软件.网络游戏聊天.Web聊天及Web消息推送.移动设备的消息推送等场景,例如Google的GTalk.<英雄联盟LOL>游戏聊天模块. 由于在Web浏览器上的JavaScript不能直接处理TCP协议,所以XMPP服务器通常会提供BOSH(Bidirectional-streams Over Synchronous HTT

谷歌三大核心技术(三)Google BigTable中文版

谷歌三大核心技术(三)Google BigTable中文版 Bigtable:一个分布式的结构化数据存储系统 译者:alex 摘要 Bigtable是一个分布式的结构化数据存储系统,它被设计用来处理海量数据:通常是分布在数千台普通服务器上的PB级的数据.Google的很多项目使用Bigtable存储数据,包括Web索引.Google Earth.Google Finance.这些应用对Bigtable提出的要求差异非常大,无论是在数据量上(从URL到网页到卫星图像)还是在响应速度上(从后端的批量

【三分钟教程】轻松使用XMPP实现iOS单聊教程(附源码)

编号 需要修改的代码 1 ////  Prefix header////  The contents of this file are implicitly included at the beginning of every source file.//#import <Availability.h>//服务器IP#define kXMPPHost @"115.29.222.253"//服务器端口#define kHostPort 5222//服务器名称,也是用户名后缀#

Google Bigtable (中文版)

http://dblab.xmu.edu.cn/post/google-bigtable/ Abstract BigTable是一个分布式存储系统,它可以支持扩展到很大尺寸的数据:PB级别的数据,包含几千个商业服务器.Google的许多项目都存储在BigTable中,包括WEB索引.Google Earth 和Google Finance.这些应用对BigTable提出了截然不同的需求,无论是从数据量(从URL到网页到卫星图像)而言,还是从延迟需求(从后端批量处理到实时数据服务)而言.尽管这些不