因此从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时重新查询?
欢迎任何建议!
答案 0 :(得分:1)
如果我知道我想要人员表中的所有对象,那就在那里 只是查询该表的更快捷的方法吗?
如果您要阅读所有人,那么使用索引就毫无意义。只需扫描您的人员表。如果您只想在每个人身上使用某些属性,则可以在Scanner / BatchScanner上使用fetchColumn(Text, Text)
方法。
当键改变时,你知道你在下一个对象
如果您只处理每一行,可以尝试使用WholeRowIterator。