我有一张包含数百万条记录的表格。此表包含有关服务器和在其上生成的事件的数据。以下是该表的行键:
rowkey = md5(serverId)+ timestamp [32个十六进制字符+10个数字= 42个字符]
其中一个用例是列出从时间t1到t2的所有事件。为此,正常扫描花费了太多时间。为了加快速度,我做了以下几点:
协处理器扫描表格如下:
for (String serverId : serverIds) {
byte[] startKey = generateKeyserverId, startTime);
byte[] endKey = generateKey(serverId, endTime);
Scan scan = new Scan(startKey, endKey);
InternalScanner scanner = env.getRegion().getScanner(scan);
....
}
我可以通过这种方法快速获得结果。我唯一担心的是大量的扫描。如果该表有20,000个serverIds,那么上面的代码将进行20,000次扫描。它会影响HBase的整体性能和可扩展性吗?
答案 0 :(得分:0)
尝试使用时间戳过滤器。
以下是在hbase shell中测试的语法
import java.util.ArrayList
import org.apache.hadoop.hbase.filter.TimestampsFilter
list=ArrayList.new()
list.add(1444398443674) //START TIMESTAMP
list.add(1444457737937) //END TIMESTAMP
scan 'eventLogTable', {FILTER=>TimestampsFilter.new(list)}
同样的api也在java和其他语言中退出。