Accumulo API:扫描仪何时最初与Accumulo通信?

时间:2017-05-16 13:08:33

标签: java accumulo

当客户端应用程序使用Apache Accumulo API使用Scanner对象查询Accumulo时,客户端最初在什么时候与Accumulo进行通信?

示例查询伪代码:

SelectMany

在上面的伪代码中,我的预感是客户端代码首先到达Accumulo(1)当调用Scanner对象的iterator()方法时,或者(2)当Iterator对象上的某个方法如下( )或者第一次调用hasNext()。

在这种情况下,客户端和Accumulo之间的第一次通信何时发生?

1 个答案:

答案 0 :(得分:2)

在单步执行代码后,我相信我找到了答案。

实现org.apache.accumulo.client.Scanner的“默认”具体类似乎是org.apache.accumulo.core.client.impl.ScannerImpl。 (另外,ScannerImpl的超类是org.apache.accumulo.core.client.impl.ScannerOptions。)

ScannerImpl的iterator()方法构造并返回一个org.apache.accumulo.core.client.impl.ScannerIterator对象。

ScannerIterator构造函数的一个参数是readAheadThreshold,很长。 ScannerImpl将此参数设置为org.apache.accumulo.core.Constants.SCANNER_DEFAULT_READAHEAD_THRESHOLD(3)。

只有当readAheadThreshold参数为0时,ScannerIterator构造函数才会向前读取。由于ScannerImpl将参数设置为3,因此构造函数不会提前读取。因此,ScannerImpl的iterator()方法不与Accumulo通信。

ScannerIterator的next()和hasNext()方法仅在“必要”时才与Accumulo联系。对于新构造的ScannerIterator,在第一次调用next()或hasNext()时与“Accumulo”进行通信是“必要的”。

我希望这有助于某人!