BigTable是否使用分层或分层LSM树压缩?

时间:2019-01-22 16:59:50

标签: merge bigtable google-cloud-bigtable lsm-tree

Google BigTable是一个使用LSM树作为其核心数据结构进行存储的系统。 LSM树可以使用不同的合并策略。最常见的两个是(1)分层合并,它的读取优化程度更高;(2)分层合并,其写操作更优化。可以通过调整相邻级别之间的大小比例来进一步配置这些合并策略。

在这些方面,我无法找到BigTable的默认行为是什么,以及是否可以对其进行调整。结果,很难理解它的默认性能属性以及如何使它们适应不同的工作负载。

通过分层合并,将运行一个LSM树收集级别,直到达到容量为止。然后它将合并这些运行,并将结果运行刷新到下一个更大的级别。每个级别最多运行O(T * log_T(N)),写成本为O(log_T(N)/ B),其中N为数据大小,B为块大小,T为大小水平之间的比率。

使用分层合并时,在LSM树的每个级别上运行一次。只要有新的运行进入级别,就会进行合并,如果该级别超过容量,则将生成的运行刷新到下一个更大的级别。每个级别最多运行O(log_T(N)),而写成本为O((T * log_T(N))/ B)。

结果,这些方案具有不同的读/写性能属性。但是,我无法找到有关Google BigTable是使用分层合并还是分层合并的信息,默认大小比率T是多少?另外,系统的这些方面是否固定,还是可调的?

1 个答案:

答案 0 :(得分:2)

尽管支持Cloud Bigtable产品的基础系统是动态的,并且由我们的工程和运营团队调整,但最终用户目前无法通过Cloud Bigtable API调整Google Cloud Bigtable使用的合并压缩行为和策略。

这是有关Bigcomp中探索的合并压缩算法的不同方法的最新文章:

在线Bigtable合并压缩 https://arxiv.org/pdf/1407.3008.pdf

我们采用了许多专有方法来动态调整和调整合并压缩行为。如果您确实有与系统使用相关的更具体的问题,或者遇到合并压缩行为方面的问题,那么您当然可以随时提出支持案例。