jeroen-de-dauw / batching-iterator
3.0.0
2017-05-16 00:44 UTC
Requires
- php: >=7.0
Requires (Dev)
- mediawiki/mediawiki-codesniffer: ~0.6.0
- ockcyp/covers-validator: ~0.6
- phpunit/phpunit: ~6.0
- squizlabs/php_codesniffer: ~2.5
Replaces
README
一个小型库,提供了一个Iterator
,该迭代器批量请求额外值。这对于数据在昂贵位置(如数据库或Web API)中时作为迭代器的基础很有用。
类概述
核心接口
BatchingIterator
- 通过BatchingFetcher
批处理请求的迭代器BatchingFetcher
- 带有fetchNext
方法的接口。你可能会需要创建一个实现
实用工具
MultipleBatchingFetcher
- 将多个BatchingFetcher
实例组合成一个InMemoryBatchingFetcher
- 将array
适配到BatchingFetcher
接口IteratorBasedBatchingFetcher
- 将Iterator
适配到BatchingFetcher
接口
用法
创建一个使用Iterator
的服务。
class TweetImporter { public function importTweets( Iterator $tweets ) { foreach ( $tweets as $tweet ) { $this->tweetStore->saveTweet( $tweet ); } } }
注意这个服务仅依赖于Iterator。它不知道Iterator如何提供其结果。因此,将服务与其结果检索者以及结果发生的时间解耦。这些结果可能来自已存在于内存中的值,封装在ArrayIterator
中,或者随着迭代从Web服务中拉取。使用ArrayIterator
对测试非常有帮助。
实现BatchingFetcher
接口。如果您已经有了用于检索数据的现有服务,这可以是一个简单的包装器。
class BatchingTweetFetcher implements BatchingFetcher { public function fetchNext( $maxFetchCount ) { // Make a call to some external service to fetch $tweets return $tweets; } public function rewind() { // Go back to the first tweet } }
现在您可以轻松实例化服务,获得批处理优化,并将所有责任很好地解耦。
class TweetImportCli { public function importTweets() { $tweetIterator = new BatchingIterator( new BatchingTweetFetcher() ); $tweetIterator->setMaxBatchSize( 42 ); $this->tweetImporter->importTweets( $tweetIterator ); } }
安装
您可以使用Composer下载并安装此软件包及其依赖项。
要将此软件包添加为项目的本地依赖项,只需将jeroen/batching-iterator
依赖项添加到项目中的composer.json
文件中。以下是一个定义了对BatchingIterator 3.x依赖的最小composer.json
文件示例
{ "require": { "jeroen/batching-iterator": "~3.0" } }
发行说明
版本 3.0.0(2017-05-16)
- 删除了对PHP 5.x的支持
- 添加了标量和返回类型提示
版本 2.1.2(2014-11-02)
- 现在
BatchingIterator
中的最大批量大小默认为10,避免了在没有设置此值的情况下使用迭代器。
版本 2.1.1(2014-08-19)
- 使用软件包名
jeroen/batching-iterator
而不是jeroen-de-dauw/batching-iterator
进行发行。
版本 2.1(2014-07-19)
MultipleBatchingFetcher
现在在其构造函数中接受一个BatchingFetcher
数组
版本 2.0(2014-07-19)
重大更改
- 向
BatchingFetcher
接口添加了rewind
方法 - 将
BatchingIterator\InMemoryBatchingFetcher
重命名为BatchingIterator\Fetchers\InMemoryBatchingFetcher
新功能和增强
BatchingIterator
现在可以多次迭代- 添加了
MultipleBatchingFetcher
- 添加了
IteratorBasedBatchingFetcher
版本 1.0 (2014-07-03)
首次发布,包括
BatchingIterator
类BatchingFetcher
接口InMemoryBatchingFetcher
是BatchingFetcher
的简单实现