数据库SQL(十一):Bigtable

一、诞生背景

BigTable设计的动机与目标

  • 动机
    需要存储的数据种类繁多、类型多样,例如URL.图片、文字、视频、html文件、用户设置数据等;
    需要处理海量的服务请求;
    商用数据库无法满足Google的需求,底层系统技术的掌控便于系统维护和升级;
  • 目标
    广泛的适用性:满足Google的系列产品的需求;
    很强的可扩展性:横向扩展和纵向扩展;
    高可用性:确保系统24X7可用;
    简单:底层系统简单减少出错概率,为上层应用开发提供便利;

二、 BigTable的数据模型

  • 分布式多维映射表结构
  • 表中数据通过行关键字(Rowkey) 、列关键字(Columnkey)以及时间戳进行索引,所有数据以字符串形式存储,由用户解析数据
  • 存储逻辑表示为(row:string,column:string. item:int64) -> string
    在这里插入图片描述
    例:网页www.cnn.com的数据片段
    行名称是倒排的URL;
    便于同一地址城的网页被存储在表中连续的位置;
    便于数据压缩,大幅提高压缩率;
    contents列族包含了网页内容;
    anchor列族包含了任何引用这个页面的anchor文本;
    CNN的主页被Sports Illustrated和MY-look主页同时引用,因此,行包含了名称为”anchor:cnnsi.com"和”anchor:my.look.ca" 的列。
    每个anchor单元格都只一个版本,contents列有三个版本,分别对应于时间戳t3,t5和t6。

三、BigTable的数据模型-Rows

  • BigTable的row key是任意的字符串,大小不超过64KB
  • 对于每行数据的读写操作都是原子的(atomic) ,不管这个行中所包含的列族数量是多少。
  • BigTable中的数据按照rowkey的字典顺序排序。
  • .单个大规模的大表不利于数据的处理与分析,BigTable将一个表划分成多个子表(Tablet) ,是负载均衡和数据分发的基本单位。

四、BigTable的数据模型-Column Families

  • BigTable将column key组织成列族(column family),是基本的访问控制单元,每个列族的数据属于同一个类型,同列族数据压缩存
  • 在把数据存放到这个列家族的某个column key下之前,必须首先创建这个列族,创建后,可以使用column key
  • 表当中所包含的列族 的数量尽可能少(至多几百个列族),在操作过程 当中,列族很少发生变化;一个表可以包含无限数量的列。
  • column key命名语法: family:qualifier
    例: anchor:cnnsi.com
  • 访问控制以及磁盘、内存审计在column family级别完成

五、BigTable的数据模型-timestamps

  • 在BigTable中,每个单元都包含相同数据的多个版本,这些版本采用时间戳进行索引。
  • 时间戳是64位整数,代表真实时间,以微秒来计算。客户应用也可以直接分配时间戳。
  • 需要避免冲突的应用必须生成唯一的时间戳。
  • 一个单元的不同版本根据时间戳降序顺序存储,最新的版本可以被最先读取。
  • 为了减轻版本数据的管理负担,BigTable支持用户设定保存单元中数据的最近n个版本,或者只保存足够新版本(比如只保存最近7天内的数据版本)

六、Bigtable体系结构

BigTable基于Google的的三个云计算组件
1)GFS: Google File System
➢基于廉价的商用计算机的大型分布式文件系统
2)Chubby
➢基于松耦合分布式系统的锁服务
➢存储元数据的存储系统
➢名字服务
3)WorkQueue
➢分布式任务调度器,用于处理分布式系统队列分组与调度
➢未公开
在这里插入图片描述
Chuby会在下一张详细介绍。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章