jeroen-de-dauw/batching-iterator

该软件包已被废弃,不再维护。作者建议使用jeroen/batching-iterator软件包。

批量获取值的迭代器

3.0.0 2017-05-16 00:44 UTC

This package is auto-updated.

Last update: 2020-04-16 12:59:46 UTC


README

Build Status Scrutinizer Code Quality Code Coverage Latest Stable Version Download count

一个小型库,提供了一个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接口
  • InMemoryBatchingFetcherBatchingFetcher的简单实现