分布式数据库系统

针对于海量数据,可扩展,高吞吐量,低时延

不支持关系模型

通过row和column进行索引,row和column可以是任意字符串

所存储的数据也是字符串

Bigtable是一个map,value是array of bytes,通过row key, column key, timestamp检索。

(row:string, column:string, time:int64) --> string

读写操作对于行是原子性的

The row range for a table is dynamically partitioned.

Each row range is called a tablet, which is the unit of distribution and load balancing.

一个tablet包含多行

列族是访问控制的基本单位

同一列族的数据通常是相同类型的,对同一列族的数据进行压缩

列族属于模式,数量有限(in the hundreds at most),很少改变

列的数量是不限制的(have an unbounded number of columns)

列键 column key命名为family:qualifier

时间戳timestamp

可通过HBase系统指定,也可在客户端指定

可存储最新n条数据,也可存储最近几天的数据

基于GFS存储log和data files

SSTable文件格式来存储Bigtable data

Internaly, each SSTable contains a sequence of blocks(typically each block is 64KB in size, but this is configurable).

A block index (stored at the end of the SSTable) is used to locate blocks; the index is loaded into memory when the SSTable is opened.

Chubby provides a namespace that consists of directories and small files.

Each directory or file can be used as a lock, and reads and writes to a file are atomic.

Chubby的职责:

1、to ensure that there is at most one active master at any time

2、to store the bootstrap location of Bigtable data

3、to discover tablet servers and finallize tablet server deaths

4、to store Bigtable schema information (the column family information for each table)

5、to store access control lists

如果Chubby持续一段时间不能访问,Bigtable becomes unavialiable。

实现包含三个部分:

a library that is linked into every client

one master server

many tablet servers (can be dynamically added or removed)

master server的职责:

1、assigning tablets to tablet servers

2、detecting the addition and expiration of tablet servers

3、balancing tablet-server load

4、garbage collection of files in GFS

5、handles schema changes such as table and column family creations

teblet server的职责:

1、manages a set of tablets (typically we have somewhere between ten to thousand tablets per tablet server)

2、handles read and write requests to the teblets that is loaded

3、splits tablets that have grown too large

每个table包含若干tablets,每个tablet对应多行

通过3层类B+树实现tablet的索引

第一层是保存在Chubby中的文件,记录的是root tablet的位置

第二层为root tablet,包含METADATA表的tablets信息,为了保证三层结构,root table只有一个,不进行split。

第二层为METADATA,包含的是user tablets的位置,以tablet's table identifier和its end row为key,value为对应tablet的位置

root tablet实际是第一个METADATA表的tablet。

Locality groups:

用户可以将同时访问的列族设置为一个locality group,每个locality group作为一个SSTable存储

Compression:

可以将包含locality group的SSTable文件进行压缩存储以节省空间

Caching for read performance:

Higher-level cache: the key-value pairs returned by the SSTable

Lower-level cache: SSTables blocks

Bloom filters:

A read operation has to read from all SSTables that make up the state of a tablet.

过滤器可以减少磁盘访问量

Bigtable的些许重点相关推荐

  1. 【感想文】感情经历,是否给你我带来的些许提升?我想,有。

    今天是周六,早上花了点时间,坐在电脑前,我略有感慨,因此就这样一边写一边想地写下来了. 有些时候确实是真的想谈个恋爱的,也想遇到那么一个姑娘,但是又不知道喜欢谁,有时候可能会对某个女孩有过好感,但是那 ...

  2. 生活,平淡,些许沉思,些许感概

    生活,平淡,些许沉思,些许感概 十岁那年,我吃到了第一个生日蛋糕,是我舅母帮我买的 如今也记忆犹新 二十岁那年,大学生活,因为平淡,所以什么事情也都归于平淡 虽然,传出一些传闻,但我却一直想找一位,嗯 ...

  3. 当六月的雨,带了些许思念的时候,记忆的扉页,被忧伤一一翻阅

    当六月的雨,带了些许思念的时候,记忆的扉页,被忧伤一一翻阅,那些流年幽梦一一散开.执一笔素笺,用浅浅的文字,写下三年心路的点滴. 如果几字成句,几句成段,几段成篇.那么我手中的一沓沓文章,就是我们三年 ...

  4. 安卓网页html/图片查看器开发——张泽华老师的些许错误

    1.在Activity中开发界面,一个url 输入框.一个确定查看按钮.一个ImageView或者TextView. html的界面Activity代码 <LinearLayout xmlns: ...

  5. 关于《人生护城河》的些许思考

    关于<人生护城河>的些许思考 前言 1.热爱是最好的天赋 2.人生商业模式决定人生终局 3.为什么要接受自己的缺点? 4.终身成长 5.做对的事情,一辈子 6.为什么要做规划 前言 辉哥: ...

  6. 关于Revit二次开发的些许事

    关于Revit二次开发的些许事 关于Revit二次开发的些许事 Revit二次开发方向 岗位需求 哪些公司在招聘Revit研发岗位? 招聘的普遍岗位职责是什么? 岗位要求有哪些? 待遇是不是美丽?! ...

  7. Linux epoll 编程些许浅谈

    Linux 内核提供 EPOLL 的网络编程模型,它是一套 reactor 同步IO多路复用编程模型,即当某个或多个网络事件发生改变时操作系统会通知正在关注的 epoll_wait 的线程进行处理,但 ...

  8. OC UITableView 的些许问题

    OC UITableView 的些许问题 文章目录 OC UITableView 的些许问题 解决iOS11tableView:heightForHeaderInSection:方法不执行的问题: 解 ...

  9. 温故而知新 ~ C指针 ~ 些许面试题目杂记

    温故而知新 ~ C指针 ~ 些许面试题目杂记 1)题1 2)题2 3)题3 4)题4 5)题5 6)题6 7)题7 8)题8 注意:下述内容基本为相关题目的截图,主要是不想再写一遍~ Github上相 ...

最新文章

  1. 作用域安全的构造函数
  2. [architecture]-ARM SMMU学习概念总结一篇就够了
  3. HashMap底层实现原理,红黑树,B+树,B树的结构原理,volatile关键字,CAS(比较与交换)实现原理
  4. word文档插入行号
  5. tmux命令启动MySQL_tmux启动脚本
  6. Windows 使用命令执行 sql 脚本文件
  7. 动态规划应用--找零钱
  8. Uncaught TypeError: l.push is not a function
  9. Web调取摄像头拍照
  10. 遗传+粒子群 求解多配送中心车辆调度问题(python)
  11. c语言中求圆台体积公式,圆台体积公式是什么
  12. 我眼中 迪杰斯特拉(Dijkstra)与 普雷姆 (prim)的 区别
  13. 基于若依框架项目点击登录时出现TypeError: Cannot read properties of undefined (reading ‘user‘)
  14. 甲骨文服务器操作系统,甲骨文年内完成操作系统移换 Linux将成主要平台
  15. Kubernetes暴漏服务类型之Nginx Ingress
  16. 水有七德,几近于道!
  17. python 问题Some characters could not be decoded, and were replaced with REPLACEMENT CHARACTER.
  18. You are trying to add a non-nullable field 'code' to business without a default; we can't do that...
  19. 如何搭建一个自己的网站
  20. STL源码剖析(第二章 空间配置器)

热门文章

  1. 160 - 17 bjanes.3
  2. Java Byte类的compareTo()方法和示例
  3. JavaScript中的String substring()方法和示例
  4. 关键字驱动测试示例_带有示例的False关键字
  5. python求素数算法_Python程序最多可计算n个质数(使用不同算法)
  6. 小议SqlMapConfig.xml配置文件
  7. c语言输出最大素数,for语句计算输出10000以内最大素数怎么搞最简单??各位大神们...
  8. python脚本编程实例_C程序调用Python脚本的例子
  9. java 设计作业——学生类的基本练习
  10. centos 无法连接网络