首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Accumulo :扫描器最初何时与Accumulo通信?

Accumulo :扫描器最初何时与Accumulo通信?
EN

Stack Overflow用户
提问于 2017-05-16 21:08:33
回答 1查看 127关注 0票数 1

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

查询伪代码示例:

代码语言:javascript
复制
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();

在上面的伪代码中,我的直觉是客户机代码首先接触到Accumulo,或者(1)当调用Scanner对象的iterator()方法时,或者(2)当在Iterator对象上第一次调用像next()或hasNext()这样的方法时。

在这个场景中,客户端和Accumulo之间的第一次通信发生在什么时候?

EN

回答 1

Stack Overflow用户

发布于 2017-05-17 03:24:57

在逐步完成代码之后,我相信我已经找到了答案。

实现org.apache.accumulo.client.Scanner的“默认”具体类似乎是org.apache.accumulo.core.client.impl.ScannerImpl.(顺便说一下,ScannerImpl的超类是org.apache.accumulo.core.client.impl.ScannerOptions.)

ScannerImpl的迭代器()方法构造并返回一个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通信。

我希望这对某些人有帮助!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44002399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档