我需要根据时间范围来查询hbase表中的数据,如果rowkey用时间戳当前缀的话插入性能就会慢。我刚怎么样设计表结构?谁能提供一个实现方案吗?
1条回答 默认 最新
- 哎呀丶老张 2014-12-16 11:23关注
public List getRecentJobs(long time, int num) {
long timestamp = time < 0 ? 0 : TRACE_ROW_KEY_SEED - time;
String keyPrefix = StringUtils.leftPad("" + timestamp, 16, '0');
List list = new ArrayList();
HTableInterface table = null;
try {
table = this.getHTable(TABLE_JOB_TRACE);
byte[] startRow = BytesUtil.toBytes(keyPrefix + "00");
byte[] stopRow = BytesUtil.toBytes("zz");
Scan scan = new Scan(startRow, stopRow);
ResultScanner rs = table.getScanner(scan);int i = 0; for (Result r : rs) { String guid = BytesUtil.toString(r.getRow()); guid = StringUtils.right(guid, guid.length() - TRACE_ROW_KEY_SEED_LENGTH); String correlationId = BytesUtil.toString(r.getValue(CF_INFO, COL_CORRELATIONID)); String errorMessage = BytesUtil.toString(r.getValue(CF_INFO, COL_ERROR)); long finishTime = BytesUtil.toLong(r.getValue(CF_INFO, COL_FINISHTIME)); String name = BytesUtil.toString(r.getValue(CF_INFO, COL_NAME)); long startTime = BytesUtil.toLong(r.getValue(CF_INFO, COL_STARTTIME)); int status = BytesUtil.toInt(r.getValue(CF_INFO, COL_STATUS)); String callbackUrl = BytesUtil.toString(r.getValue(CF_INFO, COL_CALLBACK)); String task = BytesUtil.toString(r.getValue(CF_INFO, COL_TASK)); JobInstance instance = new JobInstance(); instance.setGuid(guid); instance.setCorrelationId(correlationId); instance.setErrorMessage(errorMessage); instance.setFinishTime(finishTime); instance.setName(name); instance.setStartTime(startTime); instance.setStatus(status); instance.setCallbackUrl(callbackUrl); instance.setTask(task); list.add(instance); i ++; if (i >= num) { break; } } return list; } catch (IOException e) { throw new BeyeException(510, e.getMessage(), e); } catch (NullPointerException e) { throw new BeyeException(404, e.getMessage(), e); } finally { try { table.close(); } catch (Exception ex) { } } }
解决 无用评论 打赏 举报
悬赏问题
- ¥30 关于#java#的问题,请各位专家解答!
- ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分 合并
- ¥20 pcf8563时钟芯片不启振
- ¥20 pip2.40更新pip2.43时报错
- ¥15 换yum源但仍然用不了httpd
- ¥50 C# 使用DEVMOD设置打印机首选项
- ¥15 麒麟V10 arm安装gdal
- ¥20 OPENVPN连接问题
- ¥15 flask实现搜索框访问数据库
- ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备