搞架构的人,Google的论文是必看的,但好像大家都不愿意去啃英文论文。故把自己的读书笔记,加入自己的思考,分享给大家。

第三部分,Google BigTable。

BigTable,很多人对它耳熟能详,但它究竟解决什么问题呢?这是今天要聊的话题。

什么是BigTable?

Google BigTable是一个分布式,结构化数据的存储系统,它用来存储海量数据。该系统用来满足“大数据量、高吞吐量、快速响应”等不同应用场景下的存储需求。

画外音:本质上,BigTable是一个存储系统。

有BigTable之前,Google面临什么问题?

Google并不是一群人坐在办公室开会,想出来的系统,Google面临着很实际的业务问题。

画外音:

很多公司的基础架构部,是坐在办公室开会,想出来的东西,然后强推业务线使用;

脱离业务的技术,都是耍流氓。

典型场景一:网页存储

Google每天要抓取很多网页:

  • 新出现的网页,新URL

  • 旧网页,旧URL

对一个已抓取的网页,旧URL为啥要反复抓取?

因为,网页会更新,例如新浪首页:

sina.com.cn/index.html

URL虽然没有变,但依然会抓取。

画外音:我去,相当于,被抓取的URL集合,只会无限增大,趋近无穷,这里面的技术难题,不知道大家感不感兴趣?

这里,对于存储系统的需求,是要存储:不同URL,不同时间Time,的内容Content。

画外音:URL+”Content”+Time => Binary。

网页的实际内容Binary,是Spider抓取出来的。

典型场景二:Google Analytics

Google Analytics要给站长展示其网站的流量PV,独立用户数UV,典型访问路径等,以帮助站长了解站点情况,优化站点。

这里,对于存储系统的需求,是要存储,不同URL,不同时间Time,的PV和UV。

画外音:

URL+”PV”+Time => $count

URL+”UV”+Time => $count

PV和UV的值,是MapReduce离线任务计算出来的。

不管是“网页存储”还是“站点统计”存储,它们都有几个共同的特点:

  • 数据量极大,TB,PB级别

  • 和时间维度相关

  • 同一个主键,属性与值有映射

画外音:

主键是URL,属性是“Content”,值是网页Binary;

主键是URL,属性是“PV”和“UV”,值是计数count。

这是Google曾经遇到的难题,面对这些难题,典型的解决方案又有哪些呢?

画外音:不是一上来就搞新方案,最先肯定是想用现有的技术要如何解决。

最容易想到的主键,属性,值的存储系统是什么?

没错,就是关系型数据库:

如上图所示,用户表

User(uid PK, name, gender, age, sex)

就是一个典型的主键,属性,值的存储模型:

  • 主键,不同用户的uid

  • 属性,schema的列名

  • ,不同主键的各个列名,对应的值

使用excel来举例是很直观的,这是一个二维table。

画外音:屎黄色的主键是一个维度,橙色的属性是一个维度。

用二维table能不能解决Google网页存储的问题呢?

如上图所示,如果没有时间维度Time,似乎是可以的:

  • 主键,使用URL

  • 属性,schema的列名,例如content,author等

  • ,不同URL的内容与作者等值

但是,一旦加入时间维度Time,二维table似乎就不灵了。

画外音:

增加一个time属性是没有用的;

增加一个time属性,只能记录同一个URL,某一个time的content,不能记录多个time的多个content;

增加一个time属性,联合主键,URL就不是KEY了;

能不能用二维table存储三维数据呢?

似乎可以通过trick的手段,在key上做文章,用key+time来拼接新key来实现。

如上图所示,仍然是二维table,通过URL+Time来瓶装key,也能够实现,存储同一个URL,在不同Time,的不同content、author。

但是,这种trick方案存在的问题是:

  • 没法实现URL查询

画外音:key上无法进行%like%查询。

  • 大量空洞,浪费存储空间

这并不是一个好的方案。

况且,当数据量达到TB、PB级别时,传统单机关系型数据库,根本无法满足Google的业务需求。

BigTable解决什么问题?

传统二维small table,无法解决Google面临的存储问题,于是Google搞了一个big table来解决。

Google对这些业务模型进行分析,在二维table的基础上扩充,抽象了一个新的“三维table”:

  • 主键,使用URL

  • 属性,schema的列名,例如content,author等

  • 时间,timestamp

  • ,不同URL的内容与作者等值

如上图所示:

  • 第一维:key(屎黄色)

  • 第二维:属性(橙色)

  • 第三维:time(蓝色)

同一个key,不同属性,不同时间,会存储一个value。

不像以行为单位进行存储的传统关系型数据库,这个三维的大表格BigTable是一个稀疏列存储系统。

画外音:能够压缩空间。

它的数据模型的本质是一个map:

key + column + time => value

的一个超级大map。

画外音:

很多业务符合这一个模型;

Google的东西能解决业务问题,所以用的人多,这一点很重要。

总结

BigTable是一个稀疏的分布式的持久化的多维度排序的大数据量存储系统,它能够解决符合上述map数据模型业务的存储问题。

画外音:

GFS是文件系统;

MapReduce是计算模型;

BigTable是存储系统。

BigTable是啥,解决啥问题,这次终于懂了。

很多时候,定义清楚问题比解决问题更难

Google BigTable到底解决什么问题?相关推荐

  1. Google MapReduce到底解决什么问题?

    第二篇,Google MapReduce架构启示(上). 很多时候,定义清楚问题比解决问题更难. 什么是MapReduce? 它不是一个产品,而是一种解决问题的思路,它有多个工程实现,Google在论 ...

  2. Google Bigtable

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

  3. 【思考】Docker到底解决了什么问题

    本文讲的是[思考]Docker到底解决了什么问题, [编者的话]作者之前是一位B2B行业的从业者,他从自己的角度出发,分析了Docker能够解决的问题.作者认为目前的B2B市场体量还是太小,但是随着D ...

  4. Google Bigtable 中文版

    1 摘要    Bigtable 是一个分布式的结构化数据存储系统,它被设计用来处理海量数据:通常是分布在数千台普通服务器上的 PB 级的数据.   Google 的很多项目使用 Bigtable 存 ...

  5. Google Bigtable (中文版)

    http://dblab.xmu.edu.cn/post/google-bigtable/ Abstract BigTable是一个分布式存储系统,它可以支持扩展到很大尺寸的数据:PB级别的数据,包含 ...

  6. 大数据三篇论文—Google Bigtable中文版

    Google Bigtable 中文版 Abstract 1 Introduction 2 Data Model 3 API 4 Building Blocks 5 Implementation 5. ...

  7. IE内嵌google chrome frame解决浏览器兼容问题

    IE内嵌google chrome frame解决浏览器兼容问题 参考文章: (1)IE内嵌google chrome frame解决浏览器兼容问题 (2)https://www.cnblogs.co ...

  8. 分布式表格系统Google Bigtable详解

    分布式表格系统Google Bigtable详解 概述 Bigtable架构 数据分布 保证 副本位置与负载均衡 存储 表的分裂与合并 存储引擎 垃圾回收 总结 概述 bigtable系统由表格组成, ...

  9. 翻译pdf中的英文 python_浅谈python实现Google翻译PDF,解决换行的问题

    我们复制PDF到Google翻译时,总是会出现换行的情况,如果自己手动去除,那就太麻烦了. 那么用Python就可以解决,复制到粘贴板以后,Python程序自动可以把\n换成空格,然后我们就可以复制到 ...

最新文章

  1. 2020年全球程序员收入报告出炉,字节跳动成唯一上榜中国公司
  2. [codevs 1034] 家园
  3. 关于MVC项目目录结构调整的想法
  4. virtualbox+oracle linux 6.3 下安装oracle 11.2.3.0
  5. 通过Etcd+Confd自动管理Haproxy(多站点)
  6. java的Teacher类_java类的继承 - osc_tauwfamo的个人空间 - OSCHINA - 中文开源技术交流社区...
  7. 带动态属性的自定义标签
  8. [转][SVN] Hook scripts的使用方法
  9. Tag标签的增加和删除功能
  10. MySQL 数据库基础知识(系统化一篇入门)
  11. 如何屏蔽 iOS 软件自动更新,去除更新通知和标记
  12. 微信小程序获取access_token报错errcode: 40125,errmsg: invalid appsecret
  13. 哪些学校考研计算机自命题,计算机考研自主命题学校
  14. 直方图中bin的说明
  15. UE4利用Save Game创建全局变量
  16. HP喷墨打印机真空加墨的方法
  17. 设计分享|基于单片机的矩阵电子琴(汇编)
  18. oracle注册服务到监听,监听程序未启动或数据库服务未注册到该监听程序解决方法-Oracle...
  19. html内联框架导航,html基本格式和内联框架
  20. 提高转化率和获取手淘流量的技巧方法,如何提高转化率?

热门文章

  1. 选择列表中的列……无效,因为该列没有包含在聚合函数或 GROUP BY 子句中
  2. coroSync packmarker
  3. 添加nginx为系统服务(service nginx start/stop/restart)
  4. maven 工程启动找不到 Spring ContextLoaderListener 的解决办法
  5. Android数据库--Sqlcipher的使用(一)
  6. 我看Chrome超越IE的意义
  7. 2011年9月最新整理的10个有趣的jQuery插件集合
  8. 统一六国的另一个法宝
  9. CDN简介及linux环境下搭建
  10. python 图形界面库对比