- 性能优化
上述各种操作已经可以实现Bigtable的所有功能了,但是这些基本的功能很多时候并不是很符合用户的使用习惯,或者执行的效率较低。有些功能Bigtable自身已经进行了优化,包括使用缓存、共享式的提交日志以及利用系统的不变性。这些手段在前面已经有了简单的介绍,这里不再讲解。除此之外Bigtable还允许用户个人在基本操作基础上对系统进行一些优化。这一部分主要向读者介绍用户可以使用的几个重要优化措施。实际上这些技术手段都是一些已有的数据库方法,只不过Google将它具体的应用于Bigtable之中罢了。
- 局部性群组
Bigtable允许用户将原本并不储存在一起的数据以列族为单位,根据需要组织在一个单独的SSTable中,以构成一个局部性群组。这实际上就是数据库中垂直分区技术的一个应用。结合图2-13的实例来看,在被Bigtable保存的网页列关键字中,有的用户可能只对网页内容感兴趣,那么它可以通过设置局部性群组只看内容这一列。有的则会对诸如网页语言、网站排名等可以用于分析的信息比较感兴趣,他也可以将这些列设置到一个群组中。局部性群组如图2-20所示。
通过设置局部性群组用户可以只看自己感兴趣的内容,对某个用户来说大量无用信息无需读取。对于一些较小的且会被经常读取的局部性群组,用户可以将其SSTable文件直接加载进内存,这可以明显的改善读取效率。
- 压缩
压缩可以有效的节省空间,Bigtable中的压缩应用于很多场合。首先压缩可以被用在构成局部性群组的SSTable中,可以选择是否对个人的局部性群组的SSTable进行压缩。Bigtable中这种压缩是对每个局部性群组独立进行的,虽然这样会浪费一些空间,但是在需要读时解压缩速度非常快。通常情况下,用户可以采用两部压缩的方式:第一步利用Bently & Mcllroy方式(BMDiff)在大扫描窗口将常见的长串进行压缩;第二步采取Zippy技术进行快速压缩,它在一个16KB大小的扫描窗口内寻找重复数据,这个过程非常快。压缩技术还可以提高子表的恢复速度,当某个子表服务器停止使用后,需要将上面所有的子表移至另一个子表服务器来恢复服务。在转移之前要进行两次压缩,第一次压缩减少了提交日志中的未压缩状态,从而减少了恢复时间。在文件正式转移之前还要进行一次压缩,这次压缩主要是将第一次压缩后遗留的未压缩空间进行压缩。完成这两步之后压缩的文件就会被转移至另一个子表服务器。
点击加载更多评论>>