在Accumulo中扫描大量数据

时间:2016-03-09 18:24:44

标签: database accumulo nosql

因此从Accumulo表中获得大量读取的问题。我可以肯定地说我理解了Accumulo的基础知识,但是我还在学习一些更精细的细节。

我在Accumulo数据库中有两个表,一个用于保存对象的属性,另一个用于保存指向O(1)查找时间对象的索引。我将使用person对象作为示例。

Person Table

row_id    colf    colq    val
uuid      person  name    joe
uuid      person  age     25
uuid      person  country usa

Person Index Table

row_id    colf    colq    val
joe       person  uuid

所以我目前得到所有人的方式是扫描索引表,并且对于索引表中的每个条目,我然后使用从索引表收集的密钥扫描person表,然后构建person对象基于从人员表中提取的内容。

对于低音量,这没有任何问题,但随着我扩展,10k人记录,查询需要约3秒。当我扩展到100k人记录时,查询可以超过30秒。

我最初的想法是,因为我正在查询索引表然后查询人员表,这占用了更多的时间,大约是通常情况下的2倍(虽然我无法确认)。

如果我知道我想要人员表中的所有对象,是否有更快的方法来只查询该表?就像只扫描一样,当键改变时,你知道你在下一个对象上?或者是我目前正在做的首选方法,这些查询需要一段时间,因为它们太大了? (我是大规模运营的新手。)

是否建议将查询限制为说5k记录,然后在需要获取下一个5k时重新查询?

欢迎任何建议!

1 个答案:

答案 0 :(得分:1)

  

如果我知道我想要人员表中的所有对象,那就在那里   只是查询该表的更快捷的方法吗?

如果您要阅读所有人,那么使用索引就毫无意义。只需扫描您的人员表。如果您只想在每个人身上使用某些属性,则可以在Scanner / BatchScanner上使用fetchColumn(Text, Text)方法。

  

当键改变时,你知道你在下一个对象

如果您只处理每一行,可以尝试使用WholeRowIterator。