hbase的caching和batch

hbase scan的时候设置caching,可以每次多从服务器取得row的数量,减少RPC的请求,那么batch的作用是什么呢?
batch指的是一次next的时候,取得keyvalue的最大值.这个设置的用处是什么呢?是因为假设hbase中的row特别宽,那么一次next的时候,取得的keyvalue特别多,导致内存不足,所以用batch限制next时取keyvalue的数量.
但是batch使用时需要注意的是,batch和某些filter有冲突,这是因为这些filter需要一个完整的row才能进行操作,而且使用了batch之后,一个row就有可能分成多个result来返回.

下图是HBase The Definitive Guide中的说明

[img]http://dl2.iteye.com/upload/attachment/0105/3129/9d1bb313-9b16-3d30-9f2a-2ade06ecdfcb.png[/img]
假设我们要查询用户手机号为"15812345678"在5月份的话费清单,可以按照以下步骤进行查询: 1. 根据数据模拟,我们已经将用户的通话记录按照"手机号+时间戳+随机数"的格式存储在HBase表"phone"中,因此可以通过设置StartRowStopRow来查询指定时间范围内的数据。 2. 由于时间戳已经包含了日期信息,我们只需要设置StartRow为"15812345678_20190501000000",StopRow为"15812345678_20190601000000",即可查询用户手机号为"15812345678"在5月份的所有通话记录。 下面是查询代码的示例: ``` public void query() throws Exception { String tableName = "phone"; Table table = HBaseUtils.getTable(tableName); Scan scan = new Scan(); String phoneNumber = "15812345678"; String startRow = phoneNumber + "_20190501000000"; String stopRow = phoneNumber + "_20190601000000"; scan.setStartRow(Bytes.toBytes(startRow)); scan.setStopRow(Bytes.toBytes(stopRow)); ResultScanner scanner = table.getScanner(scan); for (Result result : scanner) { String rowKey = Bytes.toString(result.getRow()); String dnum = Bytes.toString(result.getValue(Bytes.toBytes("cf"), Bytes.toBytes("dnum"))); String length = Bytes.toString(result.getValue(Bytes.toBytes("cf"), Bytes.toBytes("length"))); String date = Bytes.toString(result.getValue(Bytes.toBytes("cf"), Bytes.toBytes("date"))); String type = Bytes.toString(result.getValue(Bytes.toBytes("cf"), Bytes.toBytes("type"))); System.out.println(rowKey + ", " + dnum + ", " + length + ", " + date + ", " + type); } scanner.close(); table.close(); } ``` 需要注意的是,如果数据量非常大,可能会导致查询效率较低,可以通过设置CachingBatch参数来提高查询效率。此外,如果需要按照时间戳来排序,可以设置Scan的TimeRange参数,并在查询结果中进行排序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值