用例 -
一个包含数百万行的HBase表
密钥用于写分发。
需要扫描整个表并根据特定值处理行的子集。
现在有两种选择如何保持价值 -
1. value是列的值(列X =值)
2. value是列限定符。
在选项1(使用列值)中,根据值扫描和过滤将使用SingleColumnValueFilter。
在选项2中,它将使用QualifierFilter,它只应检查是否存在限定符。
问题是这两个选项之间是否存在性能差异。 QualifierFilter应该有更好的性能吗?检查限定符是否比检查列值更便宜?
答案 0 :(得分:1)
QualiferFilter和ValueFilter都会查看所有单元格(一个查看值中的另一个键 - 请参见下文),以便它们具有相同的性能
QualiferFilter:
@Override
public ReturnCode filterKeyValue(Cell v) {
int qualifierLength = v.getQualifierLength();
if (qualifierLength > 0) {
if (doCompare(this.compareOp, this.comparator, v.getQualifierArray(),
v.getQualifierOffset(), qualifierLength)) {
return ReturnCode.SKIP;
}
}
return ReturnCode.INCLUDE;
}
ValueFilter:
@Override
public ReturnCode filterKeyValue(Cell v) {
if (doCompare(this.compareOp, this.comparator, v.getValueArray(),
v.getValueOffset(), v.getValueLength())) {
return ReturnCode.SKIP;
}
return ReturnCode.INCLUDE;
}