HBase Filter 过滤器之 Comparator 原理及源码学习

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

HBase Filter 过滤器之 Comparator 原理及源码学习

周蓬勃   2020-04-26 我要评论
> **前言:**上篇文章[HBase Filter 过滤器概述](https://mp.weixin.qq.com/s/76y5NIBQMwvR11Cx2Mbt3w)对HBase过滤器的组成及其家谱进行简单介绍,本篇文章主要对HBase过滤器之比较器作一个补充介绍,也算是HBase Filter学习的必备低阶魂技吧。本篇文中源码基于HBase 1.1.2.2.6.5.0-292 HDP版本。 HBase所有的比较器实现类都继承于父类ByteArrayComparable,而ByteArrayComparable又实现了Comparable接口;不同功能的比较器差别在于对父类compareTo()方法的重写逻辑不同。 下面分别对HBase Filter默认实现的七大比较器一一进行介绍。 ## 1. BinaryComparator **介绍:**二进制比较器,用于按字典顺序比较指定字节数组。 先看一个小例子: ``` public class BinaryComparatorDemo { public static void main(String[] args) { BinaryComparator bc = new BinaryComparator(Bytes.toBytes("bbb")); int code1 = bc.compareTo(Bytes.toBytes("bbb"), 0, 3); System.out.println(code1); // 0 int code2 = bc.compareTo(Bytes.toBytes("aaa"), 0, 3); System.out.println(code2); // 1 int code3 = bc.compareTo(Bytes.toBytes("ccc"), 0, 3); System.out.println(code3); // -1 int code4 = bc.compareTo(Bytes.toBytes("bbf"), 0, 3); System.out.println(code4); // -4 int code5 = bc.compareTo(Bytes.toBytes("bbbedf"), 0, 6); System.out.println(code5); // -3 } } ``` 不难看出,该比较器的比较规则如下: - 两个字符串首字母不同,则该方法返回首字母的asc码的差值 - 参与比较的两个字符串如果首字符相同,则比较下一个字符,直到有不同的为止,返回该不同的字符的asc码差值 - 两个字符串不一样长,可以参与比较的字符又完全一样,则返回两个字符串的长度差值 看一下以上规则对应其compareTo()方法的源码实现: 实现一: ``` static enum UnsafeComparer implements Bytes.Comparer

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们