我正在尝试创建Java用于查询的通用方法hbase。
我目前有一篇写有3个论点的书
Range(扫描表)Column(要退货)...和Condition(即browser==Chrome)因此,一条语句(如果使用SQLish语言编写)可能看起来像
SELECT OS FROM TABLE WHERE BROWSER==CHROME IN RANGE (5 WEEKS AGO -> 2 WEEKS AGO)
Run Code Online (Sandbox Code Playgroud)
现在,我知道我没有HBase正确使用(对rowkey使用常见的列查询等),但是为了进行实验,我想尝试一下以帮助我学习。
因此,我要做的第一件事是在Range上设置Scan。(5周到2周前),由于rowkey是timestamp,因此非常有效。
然后设置一个SingleColumnValueFilter(browser = Chrome)(在范围过滤器之后,这非常快)
然后,将所有rowkeys(来自扫描)存储到array。
对于每个rowkey(在数组中),我执行一个GET操作以获取对应的OS。
我尝试使用MultiGet,这大大加快了过程。
然后GET,我尝试使用普通请求,每个请求都产生一个新线程,这些线程同时运行,从而将查询时间减少了一半!但是仍然不够快。
我考虑过使用与数据库的单个连接来限制线程数。即-每个连接100个线程。
考虑到我的情况,执行这些GETs 的最有效方法是什么,还是我完全不正确地采用它?
任何帮助深表感谢。
编辑(这是我的线程GET尝试)
List<String> …Run Code Online (Sandbox Code Playgroud)