HBase 源码

HBase的源码中FilterList是一个不常用到的类,今日用到了,小研究了下,发现还是有优化的空间的。优化以后可以减少近一半的 ( operator == ? ) 判断。

// 优化前
public ReturnCode filterKeyValue(KeyValue v) {
ReturnCode rc = operator == Operator.MUST_PASS_ONE ? ReturnCode.SKIP
: ReturnCode.INCLUDE;
for (Filter filter : filters) {
if (operator == Operator.MUST_PASS_ALL) { // @here
if (filter.filterAllRemaining()) {
return ReturnCode.NEXT_ROW;
}
ReturnCode code = filter.filterKeyValue(v);
switch (code) {
case INCLUDE:
continue;
case NEXT_ROW:
case SKIP:
return ReturnCode.SKIP;
default:
return code;
}
} else if (operator == Operator.MUST_PASS_ONE) { //@here
if (filter.filterAllRemaining()) {
continue;
}

switch (filter.filterKeyValue(v)) {
case INCLUDE:
rc = ReturnCode.INCLUDE;
// must continue here to evaluate all filters
case NEXT_ROW:
case SKIP:
// continue;
}
}
}
return rc;
}


优化后
public ReturnCode filterKeyValueNew(KeyValue v) {
ReturnCode rc = operator == Operator.MUST_PASS_ONE ? ReturnCode.SKIP
: ReturnCode.INCLUDE;
switch (operator) {
case MUST_PASS_ALL: //@here
for (Filter filter : filters) {
if (filter.filterAllRemaining()) {
return ReturnCode.NEXT_ROW;
}
ReturnCode code = filter.filterKeyValue(v);
switch (code) {
case INCLUDE:
continue;
case NEXT_ROW:
case SKIP:
return ReturnCode.SKIP;
default:
return code;
}
}
break;
case MUST_PASS_ONE: //@here
for (Filter filter : filters) {
if (filter.filterAllRemaining()) {
continue;
}
if (filter.filterKeyValue(v) == ReturnCode.INCLUDE) {
rc = ReturnCode.INCLUDE;
}
}
break;
default:
break;
}
return rc;
}


在filterRow和filterRowKey两个方法中也做同样的修改。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值