读书人

HBase在单Column跟多Column情况下批量

发布时间: 2014-01-21 00:35:39 作者: rapoo

HBase在单Column和多Column情况下批量Put的性能对比分析

程序输出结果如下:

single column Put size: 1208multiple columns Put size: 10575

由运行结果可得到,9719/1192 = 8.75,与上述理论分析值(7.85~8.36倍)、实际测试结果值(9.0倍)十分接近,基本可以验证测试结果的准确性。

如 果你还对put.heapSize()方法感兴趣,可以继续阅读其源码实现,你会发现对于一个put对象来说,其中KeyValue对象的大小最主要决定 了整个put对象的heapSize大小,为了进一步通过实例验证,下面的这段代码分别计算单column和多columns两种情况下一行数据的 KeyValue对象的heapSize大小:

import org.apache.hadoop.hbase.KeyValue;public class KeyValueHeapSize {    /**     * @param args     */    public static void main(String[] args) {        // single column KeyValue size        byte[] row = new byte[64]; // test row length        byte[] family = new byte[1]; // test family length        byte[] qualifier = new byte[4]; // test qualifier length        long timestamp = 123456L; // ts        byte[] value = new byte[751]; // test value length        KeyValue singleColumnKv = new KeyValue(row, family, qualifier, timestamp, value);        System.out.println("single column KeyValue size: " + singleColumnKv.heapSize());        // multiple columns KeyValue size        value = null;        KeyValue multipleColumnsWithoutValueKv = new KeyValue(row, family, qualifier, timestamp, value);        System.out.println("multiple columns KeyValue size: " + (multipleColumnsWithoutValueKv.heapSize() * 53 + 751));    }}

程序输出结果如下:

single column KeyValue size: 920multiple columns KeyValue size: 10079

与前面PutHeapSize程序的输出结果对比发现,KeyValue确实占据了整个Put对象的大部分heapSize空间,同时发现从KeyValue对象级别对比两种情况下的传出数据量情况:10079/920 = 10.9倍,也与实际测试值比较接近。

4. 相关结论

经过以上分析可以得出以下结论:

读书人网 >其他数据库

热点推荐