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倍,也与实际测试值比较接近。
经过以上分析可以得出以下结论:
?
作者:原 攀峰
转载:http://blog.linezing.com/2014/01/hbase在单column和多column情况下批量put的性能对比分析