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两个方法中也做同样的修改。
分享到:
相关推荐
### HBase源码解析与开发实战 #### 一、HBase简介 HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了...
《深入剖析HBase源码:理解其核心机制》 HBase,作为一款基于分布式存储的NoSQL数据库,广泛应用于大数据领域。它构建于Hadoop之上,利用HDFS提供高可靠性和高可扩展性。本文将深入探讨HBase的实现原理,特别是其...
三、HBase源码解析 1. **Region分配与负载均衡**:在`org.apache.hadoop.hbase.master`包下,RegionServerTracker类负责监控Region服务器状态,LoadBalancer类实现Region的负载均衡策略。 2. **元数据管理**:元...
《深入理解HBase:源码剖析与测试实践》 HBase,全称为Hadoop Database,是一种基于Apache Hadoop的开源分布式非关系型数据库。它的设计灵感来源于Google的Bigtable,旨在处理大规模数据集,通常在PB级别以上。...
HBase源码(hbase-2.4.9-src.tar.gz)是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File ...
"hbase源码带中文注释"的资源对学习和理解HBase的工作原理以及如何进行开发具有极大的帮助。下面,我们将深入探讨HBase的关键组件和概念。 1. **HBase Common**: 这是HBase的核心库,包含了所有公共的类和接口,如...
HBase源码分析与开发实战视频技术讲解高阶视频教程以及课件,内部讲解资料 内容非常详细 值得想要提高薪水的人去学习了解
hadoop2.x、Hive、HBase源码解析+企业级应用视频,本人花钱买的视频,全部的还没有看,如果感觉老师讲的不好,请不要碰我,谢谢
在研究HBase源码时,我们可以关注以下几个核心概念和组件: 1. **Region服务器**:HBase的主要工作单元,负责存储和处理表的数据。每个Region服务器管理多个Region,Region包含表的一部分行。 2. **Region**:...
### HBase源码分析 #### 一、HBase性能测试要点与分析 ##### 1.1 测试环境 - **硬件配置**: - 客户端:1台 - RegionServer:5台 - Master:1台 - ZooKeeper:3台 - **软件配置**: - CPU:每台服务器配备8...
《HBase实战源码》是针对Apache HBase这一分布式、高性能、基于列族的NoSQL数据库的深度解析书籍。源码分析是理解HBase工作原理和技术细节的重要途径。HBase在大数据领域扮演着关键角色,它能够处理海量数据并提供...
hive编译,jars,HBaseScanner构建.pptx,HBase之RegionServer命令启动流程.pptx,扩展.docx,尚硅谷大数据技术之HBase.xmind,尚硅谷大数据技术之HBase.pdf等等 很全。
hbase源码调试的时候,需要用它生成hbase-server模块的jamon模版代码,其官网需要翻墙
2. 配置环境:修改`dev-support/generate-hadoopX-poms.sh`脚本,将`hbase_home`变量设置为实际的HBase源码目录。 3. 更新Hadoop依赖:编辑`pom.xml`文件,将`<hadoop-two.version>`从2.2.0改为2.4.1,以匹配你的...
源码包“hbase-0.98.1-src.tar.gz”提供了HBase 0.98.1版本的完整源代码,对于理解其内部工作原理、进行二次开发或调试是非常有价值的。 HBase的核心概念包括: 1. 表:HBase中的表由行和列族组成,表名全局唯一。...
《深入剖析HBase 0.98.12.1源码》 HBase,作为Apache软件基金会的一个开源项目,是构建在Hadoop文件系统(HDFS)之上的分布式列式数据库,它提供了高可靠性、高性能、可伸缩的数据存储解决方案。HBase 0.98.12.1是...