BigTable中的Bloom过滤器可以仅用于基于行ID进行过滤吗?

时间:2019-01-20 20:09:01

标签: bigtable google-cloud-bigtable bloom-filter

BigTable使用布隆过滤器允许点读取,以避免访问在给定键列对内不包含任何数据的SSTable。如果查询仅指定行ID而没有指定列ID,那么可以使用这些Bloom筛选器来避免访问SSTables吗?

BigTable使用行-列对作为键插入其Bloom筛选器。这意味着查询可以将这些过滤器用于指定行-列对的点读取。

现在,假设我们有一个查询来仅基于行ID获取一行的所有列。据我所知,此查询事先不知道属于该行的列是什么,因此它可能无法使用Bloom筛选器,因为它无法枚举可能的行-列对。结果,这样的查询可能无法使用Bloom过滤器,因此效率较低。

从理论上讲,BigTable可以通过仅将行ID插入Bloom Bloom过滤器中来解决此问题,但是我不能确定当前的实现是否这样做。

这个问题对于设计在BigTable上运行的有效查询可能很重要。任何提示都会很棒。

1 个答案:

答案 0 :(得分:2)

HBase Bloom过滤器同时执行行和行col检查。 HBase是基于BigTable纸构建的,因此很有可能BigTable也会这样做。

  

HBase Bloom Filter是一种节省空间的机制,用于测试StoreFile是否包含特定的行或行列单元格。

参考:https://learning.oreilly.com/library/view/hbase-administration-cookbook/9781849517140/ch09s11.html

2006年的BigTable论文只提到了使用Bloom过滤器的基于行列的搜索。
https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf