首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

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

2014-01-21 
HBase在单Column和多Column情况下批量Put的性能对比分析程序输出结果如下:single column Put size: 1208mu

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. 相关结论

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

  • 在实际应用场景中,对于单column qualifier和多column qualifier两种情况,如果value长度越长,row key长度越短,字段数(column qualifier数)越少,前者和后者在实际传输数据量上会相差小些;反之则相差较大。
  • 如果采用多column qualifier的方式存储,且客户端采取批量写入的方式,则可以根据实际情况,适当增大客户端的write buffer大小,以便能够提高客户端的写入吞吐量。

    ?

    作者:原 攀峰

    转载:http://blog.linezing.com/2014/01/hbase在单column和多column情况下批量put的性能对比分析

热点排行