HBase最佳读取方式?“批量读”or“多线程并发读?

无边的绿波 2013-12-03 09:52:02
hbase提供get,scan两种获取数据的方式。这里主要说下get获取方式,
get有一种是table.get(get) 还有一种是table.get(List<Get>);
假设我一次要取十个rowkey的数据,可以使用:
1、 循环十次,每次取一条数据。
for(String key : keys){
Result result = table.get(new Get(key.getByte()));
}

2、一次获取十条数据

3、并发开启十个线程,每个线程去获取一条数据


疑问:
三种比较方式中,第二种读取性能是最快的,第三种并发获取是最慢的。为什么会是这样呢?

参考地址:http://www.cnblogs.com/panfeng412/archive/2012/03/08/hbase-performance-tuning-section3.html
这个里面提到了 “批量读”和“多线程并发读”,两者进行比较性能如何?这个多线程并发读取的意义在哪里?有什么优点吗?
希望大牛们,不吝赐教。
谢谢
...全文
997 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
少主无翼 2013-12-03
  • 打赏
  • 举报
回复
第一种方法循环读取每次读取的数据量少,所以在网络中传输时花费的时间也较少,但是会多次请求regionserver,所以在响应时间方面肯定会多些时间,还有你是使用一个HTable对象进行循环请求还是每次循环都new一个HTable对象也是不同的。 第二种方法批量读,这个跟关系型数据库的批量操作是一样的,当数据量较少时操作效率肯定是最高的,因为省去了多次请求和响应的时间;但是当数据量达到一定规模后,大量的数据在网络上的传输时间将大大增加,使得整个请求的耗时大大增加。 第三种方法多线程,受限于机器的原因,我们机器一般是双核,所以其实多线程也不是真正意义上的并发,而且还多了一些cpu调度时间。 以上纯属个人理解

20,808

社区成员

发帖
与我相关
我的任务
社区描述
Hadoop生态大数据交流社区,致力于有Hadoop,hive,Spark,Hbase,Flink,ClickHouse,Kafka,数据仓库,大数据集群运维技术分享和交流等。致力于收集优质的博客
社区管理员
  • 分布式计算/Hadoop社区
  • 涤生大数据
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧