hbase过滤器 - 它表现良好

时间:2012-09-06 16:06:16

标签: performance hbase

就我而言,我们为init查询集定义了行键,我们正在查询行键并保留列族和列。

例如。 Row Key类似于:

%userid%_%timestamp%

我们正在做一些像

这样的查询
select columnFamily{A,B,C} from userid=blabla and blabla < timestamp < blabla 

性能非常好,因为这就是为hbase构建的 - 行键查找。

但是,由于新要求的建立,我们需要查询更多字段:列。像:

select * from userid=blabla and blabla < timestamp < blabla and A=blabla and B=blabla and c=blabla

我们开始使用hbase过滤器。我们在其中一个列上尝试了EqualFilter - A,从功能的角度来看它可以正常工作。

我有一个普遍关注的问题,给定我们的行键,

  1. 我们可以继续针对所有A,B,C列添加过滤器以满足不同的查询需求吗?在hbase查询中添加的过滤器数量是否会降低读取性能?
  2. 如果有影响,影响有多大?
  3. 有人可以向我解释我们应该如何从性能角度使用最好的hbase过滤器吗?

2 个答案:

答案 0 :(得分:3)

1)我们可以继续针对所有A,B,C列添加过滤器以满足不同的查询需求吗?是否
在hbase查询中添加的过滤器数量会降低读取性能吗?

是的,你可以这样做。它会影响性能,具体取决于数据集的大小以及您使用的过滤器。

2)如果有影响,影响有多大?

您返回的数据越少越好。您不想获取不需要的数据。过滤器可帮助您仅返回所需的数据。

3)有人可以向我解释我们应该如何从性能角度使用最好的hbase过滤器吗?

最好使用前缀过滤器等过滤器,与特定值(或限定符,列等)完全匹配的过滤器,或者对数据进行大于/小于类型的比较。这些类型的过滤器不需要查看每行或每个表中的所有数据以返回正确的结果。避免使用正则表达式过滤器,因为必须对过滤器正在查看的每一段数据执行正则表达式,这可能会对大型数据集造成负担。

此外,HBase书籍的作者Lars George提到人们更多地转向协处理器而不是过滤器。可能还想看看协处理器。

答案 1 :(得分:1)

1)我们可以继续针对所有A,B,C列添加过滤器以满足不同的查询需求吗?是否 HBase查询中添加的过滤器数量会降低读取性能吗? - 是的,您可以为所有列添加过滤器,但如果您存储了大量数据,它肯定会影响查询的性能。 尽量避免使用列过滤器,因为无论何时添加任何列过滤器,最终都会增加基于列的比较次数。

2)如果有影响,影响有多大? -Filter可以帮助您恢复结果集,因此只有在获取时才会获得所需的数据。

3)有人可以向我解释我们应该如何从性能角度使用最好的hbase过滤器吗? -in HBase rowFilter(它将包含前缀)是最有效的过滤器,因为它们不需要查看所有记录。因此它将包含您需要经常查询的组件。 -Value过滤器是效率最低的过滤器,因为它必须比较列的值。 - 在HBase过滤器中,过滤器序列很重要,如果要将多个过滤器添加到过滤器列表中,则添加的过滤器序列将对性能产生影响。 我将举例解释 如果您需要将三个不同的过滤器添加到查询中。然后,当应用第一个过滤器时,下一个过滤器将具有要查询的较小数据,并且在第三个过滤器之后将具有较小的数据。

因此,首先尝试添加有效的过滤器ie.rowkey相关过滤器,然后再添加其他过滤器