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两个方法中也做同样的修改。
分享到:
相关推荐
【No0057】HBase源码解析与开发实战
HBase源码分析,详细的源码分析,专业的知识分析,绝对难得
hadoop hbase源码包 稳定版hbase-0.94.4.tar.gz
HBase源码(hbase-2.4.9-src.tar.gz)是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File ...
hbase是一个开源的数据库,主要用于大数据集的分布式存储,本身是hadoop的一个子项目,区分于传统的数据库,它是按列存储的
HBase源码分析与开发实战视频技术讲解高阶视频教程以及课件,内部讲解资料 内容非常详细 值得想要提高薪水的人去学习了解
hadoop2.x、Hive、HBase源码解析+企业级应用视频,本人花钱买的视频,全部的还没有看,如果感觉老师讲的不好,请不要碰我,谢谢
hbase源码带中文注释,看着不费劲,学着不累!
Hbase权威指南 随书源代码 源码包 绝对完整版 maven工程,带pom文件,可以直接作为一个完整工程导入eclipse等ide。
HBase实战 hbase in action 源码
hbase源码分析,了解hbase原理和api的简单实用。
hive编译,jars,HBaseScanner构建.pptx,HBase之RegionServer命令启动流程.pptx,扩展.docx,尚硅谷大数据技术之HBase.xmind,尚硅谷大数据技术之HBase.pdf等等 很全。
hbase源码调试的时候,需要用它生成hbase-server模块的jamon模版代码,其官网需要翻墙
主要针对那些架构师及开发人员而设计,希望他们能更好地理解大数据应用程序的部署。在这之前,你应该具备基本的Hadoop知识,包括所需组件的设置以及成功安装过Hadoop集群,我们不会在Hadoop的配置或NodeManager功能...
hbase源码,适合研究分析底层实现。对hbase的原理的理解很有好处
hbase-0.98.1-src.tar.gz hbase 0.98源码包
Hbase1.3.1源码