当前课程知识点:高级大数据系统 > NoSQL > Bigtable > Video
下面我们通过一个具体的
这个实例来介绍nosql
那么这个实力是google的
这个big table
这张图实际上是google
为了纪念他们的这个big table
实际上做的这样一个建筑
那么从中文上
他的意思就是大桌子
对吧
所以我们来看big table
对google它的今天所有的业务
实际上是非常重要的
那么它衍生出来的一些产品
比如说之后的这个spanner
实际上也都是支撑google
所有业务一个重要的基础设施
我们来看这个系统
它到底有哪些特性
它怎么去做的
以及它有什么样的性能上的考虑
BIG TABLE是这个
2008年google公布的
那么通过这篇论文
他们在之前的几年中
对这种系统的探索
然后把这种探索的经验
分享了出来
那么BIG TABLE
实际上它是一个典型的
基于google分布式文件系统的
这样一个大数据的数据库平台
那么我们来看它的一些特性
是怎么样的
首先它面向的这个环境
是一个google典型的
定义的这种分布式系统的
一个环境
系统可能会出现故障
网络可能会出现问题
然后数据可能会丢失
在这样的一个环境底下
他要求做一个
这种nosql的平台
能够保证数据的可用性
能够对抗系统中的
各个模块的失败
能够做到这种失败的容忍度
同时它对于整个系统的
可扩展性有需求
它要能够支持google
当时成千上万台的服务器
它能够支持TB级的
一个内存的一个管理
然后它能够对海量规模的
这个磁盘数据
PB级的进行一个管理
同时
它能够提供一个高性能的
数据的查询
包括数据的读
还有一定量的这种数据的写
同时它这个系统
应该是从实用的角度
是有比较好的
这种可管理性
那么具体体现在这样两方面
第一个nosql
是可以像在传统的
分布式文件系统里面一样
可以添加
可以删除
可以坏掉
不影响整个系统的性能和使用
同时它可以根据
实际上的这种用户的行为
比如说业务的请求的情况
来决定数据在各个服务器上
它的一个分配的方式
以及其它资源的这样一个
预留和分配的方式
达到整体上性能的一个保障
那么我们介绍
big table实际上是
通过几个方面来介绍
第一个方面是
它的这个数据的模型
实际上我们在介绍其他的
分布式系统中也都会非常的关注
它使用的这个数据模型
比如说在分布式文件系统里面
它的数据模型可能是行式的数据
或者是key value的数据
那么在这个spark里面
它的这种数据
可能是RDD的
那么在今天我们说的
这个big table里面
它的这种数据模型
是什么样的呢
我们来看那么它基本上
是想把数据组织成
一个表格的一个样子
那么这个表格有这样的一些属性
首先它有行
那么一行数据实际上就是
我们能够往分布式文件系统里面
插入的一行数据
大家可以这样简单的先去理解
实际上从这个描述上大家也知道
big table其实是基于
这种文件的分布式文件系统
衍生而来的
那么它还有列
实际上行列已经从矩阵的样子上
把这个表格给定义出来了
但它除了行和列之外
它还有一个叫做time stamp
的这样一个新的属性
那么大家可以简单的理解
time stamp是什么呢
time stamp是记录了这个数据
它的一个生成的时间
或者说上一次更新的时间
所以big table
从本质上利用了这样的数据模型
是可以在它的表格中
对历史的版本
对不同时期的数据
进行一个描述
当然这和Google本身的
这个业务是有关的
这是big table
它的这样一个数据的模型
通过行
通过列
通过这个时间戳
把数据给组织到一块
我们来具体来看
它的这个数据模式
首先是行
我们来看它的一个特征是什么样
行它是由一个名字去决定的
来对它进行索引的
那么这个名字可以
是任意的字符串
具有一定的最大长度的限制
那么行实际上是将数据
在这个原始的文件里面
进行索引的这样一个标准
那么它在我们插入了
这一行记录之后
实际上就需要把这一行数据
给放进去
那么在big table的
这个数据的物理的
这种组织上它是按照行的
这种字母的这样一个序
来进行一个排序
当然其他的排序方式也是支持的
那么在Google的业务当中
如果它的行是通过这些url
来组织的话
那么这种字母的序实际上
可以很方便
它来对这些不同的站点
进行一个检索和索引
那么在这个行里面
又会把相邻的一些行组织在一起
形成了big table
它的一个单元
叫做tablet
也就是说若干行
当它达到一定的长度之后
我们把它放到一块
这个行的一个范围
就叫做一个tablet
整个这个big table
实际上就是在
tablet这样一个层面上
进行数据的一个管理
而在tablet里面
会有很多很多的这样的数据行
那么除了行之外
为了在big table里面
实现类似于传统关系数据库里面
这种数据的一个结构
我们还引入了列
大家可以看得到
在我们给出的这个例子当中
实际上行和列
是一个矩阵这样的模式
那么这边我们有行
而这边有不同的这个列
大家可以看到
在这个例子当中实际上是去
介入了网页的一些代码和属性
那么列是怎么样去组织
这里面就会有一些新的概念
实际上google是通过列的
这个family和列的这个qualifier
来对列进行划分的
family实际上大家可以理解它是一个
相对比较大的
一个列上的一个概念
而qualifier是一个细节的
这样一个描述
比如说在我们的这个例子当中
大家可以看到content
它就会产生一个这个family
而这个content底下
它会给你包含很多很多的
这个qualifier
形成不同的这种具体的
一个一个的列
那么我们来看这个列
它具有一些什么样的属性
首先这些列和行一样
它也必须在数据创建
插入的时候
它就需要得到创建
然后它的这个列的
这个family通常来说
允许的这个数量并不会特别多
或者说google big table
建议使用者在创建
列的family的时候
对这个family
有一定的数量的控制
它的这个qualifier却不受限制
你可以通过family底下
创建很多很多的qualifier
达到你任意扩展你的这个列的
这样一个目标
那这是和它系统实现中
这种性能的优化是相关的
那么第三个是time stamp
我们说有行有列有time stamp
实际上我们就可以决定一个数据
在big table的table中
是怎么去放的了
那么
我们来看这个time stamp
它具有一些什么样的这种特性
首先这种time stamp
它的一个最原始的作用
是用来区分不同的版本
那么在google
最开始的业务中
为什么会有这些版本呢
我们以网页为例
实际上
网页并不是一成不变的
大家比如说会去使用的
这些门户网页
或者说其他的一些信息的网页
它们会随着时间的变化
会产生很多的版本
那么google为了
对这些版本进行区分
或者说其他的
这种搜索的这个目的
他们会使用time stamp
来对这些版本进行一个划分
那么通常在真正使用
这个big table的时候
会将这个最新的版本
做一个特别的
这种time stamp的一个标识
而将老版本通过它的版本号
或者是通过它当时更新的时间
来进行一个区分
这是在实际系统中使用的时候
大家会这么去做
那么有了这个time stamp
实际上我们就可以
做很多的特性出来
那这边给了一些例子
比如说可以做这个垃圾的回收
那么我们可以让整个系统
比如说只保留
最新的若干个版本号
那么老的这些数据
可能就可以标记为不用
然后过一段时间之后
会被big table删除掉
或者说通过其他的垃圾回收的
机制把它给删除掉
当然我们还可以除垃圾回收之外
我们还可以让整个系统
保留最新的一些版本
那么这也是达到对系统空间
有效利用的一个方式
-What is big data and what is big data system?
--Video
-Problems in big data systems?
--Video
-Overview of the course
--Video
-Principles of big data system design
--Video
-Manipulating Data on Linux
--Video
--Video
--Video
-Basics of Linux Data Processing--Manipulating Data
-Running Commands on a Single Machine
--Video
-Running Commands on a Single Machine--作业
-Using a Linux Cluster
--Video
-Using a Linux Cluster--作业
-Storage for Big Data Computing: Distributed file system
--Video
-Storage for Big Data Computing: Distributed file system--作业
-File system and GFS
--Video
-File system and GFS--作业
-Understanding HDFS using Legos
--Video
-Understanding HDFS using Legos--作业
-File System Implementation and DFS
--Video
--Video
-File System Implementation and DFS--作业
-What is MapReduce and why
--Video
-What is MapReduce and why
-Learn MapReduce by playing with cards
--Video
-Processing pattern
--Video
-Processing pattern--作业
-Hadoop
--Video
-Hadoop--作业
-Algorithms in MapReduce
--Video
-Algorithms in MapReduce--作业
-Tutorial
--Video
-Background
--Video
-Background--作业
-Spark
--Video
-Spark--作业
-Use Spark for data mining
--Video
-Use Spark for data mining--作业
-Spark data processing
--Video
-Spark data processing--作业
-Experiment in Spark
--Video
-Experiment in Spark--作业
-Introduction to streaming data processing
--Video
-Introduction to streaming data processing--作业
-Storm
--Video
--Video
--Video
-Storm--作业
-Spark streaming
--Video
--Video
-Spark streaming--作业
-NoSQL introduction
--Video
-NoSQL introduction--作业
-Common Advantages
--Video
-Common Advantages--作业
-Bigtable
--Video
-Bigtable--作业
-Master Startup
--Video
-Master Startup--作业
-HBase
--Video
-HBase--作业
-What is GraphDB and Graph data processing
--Video
-What is GraphDB and Graph data processing--作业
-Graph systems
--Video
-Graph systems
-Example of a GraphDB
--Video
-Example of a GraphDB--作业
-Mahout
--Video
-Mahout--作业
-Case Study: Recommendation
--Video
-Case Study: Recommendatio作业
-Recommendation in Mahout
--Video
-Recommendation in Mahout--作业