2

在我的例子中,我们为初始查询集定义了行键,我们正在查询行键并单独保留列族和列。

例如。行键类似于:

%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 过滤器吗?
4

2 回答 2

3

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

是的,你可以这样做。它会根据数据集的大小和您使用的过滤器影响性能。

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

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

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

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

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

于 2012-09-06T20:01:08.043 回答
1

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

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

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

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

于 2017-05-02T05:41:09.290 回答