- 子表服务器
Bigtable中实际的数据都是以子表的形式保存在子表服务器上的,客户一般也只和子表服务器进行通信,所以子表及子表服务器是我们重点讲解的概念。子表服务器上的操作主要涉及子表定位、分配以及子表数据的最终存储问题。其中子表分配在前面已经有了详细介绍,这里略过不讲。在讲解其他问题之前我们首先介绍一下SSTable的概念以及子表的基本结构。
- SSTable及子表基本结构
SSTable是Google为Bigtable设计的内部数据存储格式。所有的SSTable文件都是存储在GFS上的,用户可以通过建来查询相应的值,图2-15是SSTable格式的基本示意图。
SSTable中的数据被划分成一个个的块(Block),每个块的大小是可以设置的,一般来说设置为64KB。在SSTable的结尾有一个索引(Index),这个索引保存了SSTable中块的位置信息,在SSTable打开时这个索引会被加载进内存,这样用户在查找某个块时首先在内存中查找块的位置信息,然后在硬盘上直接找到这个块,这种查找方法速度非常快。由于每个SSTable一般都不是很大,用户还可以选择将其整体加载进内存,这样查找起来会更快。
从概念上来讲子表是表中一系列行的集合,它在系统中的实际组成如图2-16所示。
每个子表都是由多个SSTable以及日志(Log)文件构成的。有一点需要注意,那就是不同子表的SSTable可以共享,也就是说某些SSTable会参与多个子表构成,而由子表构成的表则不存在子表重叠的现象。Bigtable中的日志文件是一种共享日志,也就是说系统并不是对子表服务器上每个子表都单独的建立一个日志文件,每个子表服务器上仅保存一个日志文件,某个子表日志只是这个共享日志的一个片段。这样会节省大量的空间,但在恢复时却有一定的难度,因为不同的子表可能会被分配到不同的子表服务器上,一般情况下每个子表服务器都需要读取整个共享日志来获取其对应的子表日志。Google为了避免这种情况出现,对日志做了一些改进。Bigtable规定将日志的内容按照键值进行排序,这样不同的子表服务器都可以连续读取日志文件了。一般来说每个子表的大小在100MB到200MB之间。每个子表服务器上保存的子表数量可以从几十到上千不等,通常情况下是100左右。
点击加载更多评论>>