gpt4 book ai didi

java - 累积API : When Does a Scanner Initially Communicate With Accumulo?

转载 作者:行者123 更新时间:2023-11-30 02:32:13 24 4
gpt4 key购买 nike

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

示例查询伪代码:

Authorizations authorizations = ...;
Connector connector = ...; // Use authorizations
Scanner scanner = connector.getScanner(..., "theTable", ...);

// Set one or more Ranges
scanner.setRange(new Range(...));

// Add one or more scan iterators
scanner.addScanIterator(...);

// scanner.fetchColumn(...); // Or fetchColumnFamily

// Get iterator
Iterator<Entry<Key, Value>> iterator = scanner.iterator();

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

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

最佳答案

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

实现 org.apache.accumulo.client.Scanner 的“默认”具体类似乎是 org.apache.accumulo.core.client.impl.ScannerImpl。 (顺便说一句,ScannerImpl 的父类(super class)是 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 进行通信。

我希望这对某人有帮助!

关于java - 累积API : When Does a Scanner Initially Communicate With Accumulo?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44002399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com