BigTable使用布隆过滤器允许点读取,以避免访问在给定键列对内不包含任何数据的SSTable。如果查询仅指定行ID而没有指定列ID,那么可以使用这些Bloom筛选器来避免访问SSTables吗?
BigTable使用行-列对作为键插入其Bloom筛选器。这意味着查询可以将这些过滤器用于指定行-列对的点读取。
现在,假设我们有一个查询来仅基于行ID获取一行的所有列。据我所知,此查询事先不知道属于该行的列是什么,因此它可能无法使用Bloom筛选器,因为它无法枚举可能的行-列对。结果,这样的查询可能无法使用Bloom过滤器,因此效率较低。
从理论上讲,BigTable可以通过仅将行ID插入Bloom Bloom过滤器中来解决此问题,但是我不能确定当前的实现是否这样做。
这个问题对于设计在BigTable上运行的有效查询可能很重要。任何提示都会很棒。
答案 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