1.如何在文件内进行快速查询?

关键点: 从File 到 Table Table = a list of sorted

2.如何保存一个很大的表?

关键点: A table = a list of tables (小表)

A tablet = a list of sorted

使用MetaData的形式保存每一个小表的位置

3.如何保存一个超大的表?

关键点:A table = a list of tablets (小表)

​ A tablet = a list of SSTables (小小表)

​ A SSTables = a list of sorted

4.如何向表中写数据?

关键点:通过写入memTable(内存表)来加速

A tablet = memTable + a list of SSTables

5.内存表过大怎么办?如何避免内存丢失数据?

内存表过大时,重新写成一个小小表 导入硬盘进行保存 成为一个新的SSTables

在硬盘中添加Tabletlog 记录写入的数据

A Tablet = memTable + a list of SSTables + log

6.如何读数据?(相当于是查找数据)

关键点: SSTable 内部的数据是有序的,但是SSTable之间的数据是无序的

​ 需要查找所有的SSTables 和 memTable 需要在硬盘中的SSTable中查找该元素

BigTable 读数据

7.如何加速读数据?

关键点:A SSTable = a list of sorted = a list of 64K blocks + index

Index会预先加载到内存 通过Index才能找到硬盘的位置

BigTable 加速读数据

8.继续加速读数据?

关键点 : 使用bloomfilter A SSTables = a list of sorted = a list of 64K blocks + bloomfilter

​ Bloomfilter会预先加载到内存 通过bloomfilter判断元素是否会存在

bloom过滤器

9.将表装入内存?

10.如何将表的物理视图装入表的逻辑视图?

Key = string(row,column,time)

11.BigTable的架构

​ Chubby锁服务

总结:BigTable使用的物理结构存储了一个超大表

​ 吃内存的BigTable和吃硬盘的GFS合为一体