php-riak/riak-client

PHP 5.4 的 Riak 客户端

v1.0.0-alpha7 2017-01-06 04:01 UTC

This package is auto-updated.

Last update: 2024-08-29 04:39:28 UTC


README

Build Status Coverage Status

PHP 的 Riak 客户端。

安装

运行以下 composer 命令

$ composer require "php-riak/riak-client"

文档

该库的 API 文档可以在 readthedocs 上找到

概述

使用 php riak 客户端入门。

开始使用客户端的最简单方法是使用 RiakClientBuilder

use Riak\Client\RiakClientBuilder;

$builder = new RiakClientBuilder();
$client  = $builder
    ->withNodeUri('proto://192.168.1.1:8087')
    ->withNodeUri('proto://192.168.1.2:8087')
    ->withNodeUri('proto://192.168.1.3:8087')
    ->build();

一旦你有了一个 $client,来自 Riak\Client\Command* 命名空间的命令就会由客户端构建并执行。

以下是一些构建和执行这些命令的基本示例。

获取数据

use Riak\Client\Command\Kv\StoreValue;
use Riak\Client\Core\Query\RiakObject;
use Riak\Client\Core\Query\RiakLocation;
use Riak\Client\Core\Query\RiakNamespace;

$object    = new RiakObject();
$namespace = new RiakNamespace('bucket_type', 'bucket_name');
$location  = new RiakLocation($namespace, 'object_key');

$object->setValue('[1,1,1]');
$object->setContentType('application/json');

// store object
$store    = StoreValue::builder($location, $object)
    ->withPw(1)
    ->withW(2)
    ->build();

$client->execute($store);

获取数据

use Riak\Client\Command\Kv\FetchValue;
use Riak\Client\Core\Query\RiakObject;
use Riak\Client\Core\Query\RiakLocation;
use Riak\Client\Core\Query\RiakNamespace;

$namespace = new RiakNamespace('bucket_type', 'bucket_name');
$location  = new RiakLocation($namespace, 'object_key');

// fetch object
$fetch  = FetchValue::builder($location)
    ->withNotFoundOk(true)
    ->withR(1)
    ->build();

$result = $client->execute($fetch);
$object = $result->getValue();

删除数据

use Riak\Client\Command\Kv\DeleteValue;
use Riak\Client\Core\Query\RiakObject;
use Riak\Client\Core\Query\RiakLocation;
use Riak\Client\Core\Query\RiakNamespace;

$namespace = new RiakNamespace('bucket_type', 'bucket_name');
$location  = new RiakLocation($namespace, 'object_key');

// delete object
$delete  = DeleteValue::builder($location)
    ->withPw(1)
    ->withW(2)
    ->build();

$this->client->execute($delete);

合并兄弟节点

兄弟节点是 Riak 中的一个重要特性,为此我们有一个接口 Riak\Client\Resolver\ConflictResolver,你实现此接口以将兄弟节点合并为单个对象。

以下是一个简单的示例,它将仅合并兄弟节点的内容

use \Riak\Client\Resolver\ConflictResolver;
use \Riak\Client\Core\Query\RiakObject;
use \Riak\Client\Core\Query\RiakList;

class MySimpleResolver implements ConflictResolver
{
    /**
     * {@inheritdoc}
     */
    public function resolve(RiakList $siblings)
    {
        $result  = new MyDomainObject();
        $content = "";

        /** @var $object \MyDomainObject */
        foreach ($siblings as $object) {
            $content .= $object->getValue();
        }

        $result->setValue($content);

        return $result;
    }
}

// register your resolver during the application start up
/** @var $builder \Riak\Client\RiakClientBuilder */
$client = $builder
    ->withConflictResolver('MyDomainObject' new MySimpleResolver())
    ->withNodeUri('http://localhost:8098')
    ->build();

// fetch the object and resolve any possible conflict
$namespace = new RiakNamespace('bucket_type', 'bucket_name');
$location  = new RiakLocation($namespace, 'object_key');
$fetch     = FetchValue::builder($location)
    ->withNotFoundOk(true)
    ->withR(1)
    ->build();

/** @var $domain \MyDomainObject */
$result = $client->execute($fetch);
$domain = $result->getValue('MyDomainObject');

性能

此库比大多数用 PHP 编写的 riak 客户端更快,在某些情况下快约 50%,这主要是因为它在可能的地方使用了协议缓冲区和迭代器。

有关更多详细信息以及 riak 客户端性能比较,请参阅: https://github.com/FabioBatSilva/riak-clients-performance-comparison

单元测试和集成测试

我们想确保所有包含在发布中的代码都有适当的单元测试覆盖率。预期所有包含新类或类方法的拉取请求(PR)都将包括适当的单元测试。

运行测试

在运行功能测试之前设置您的 riak 集群

  • 创建并激活以下类型
riak-admin bucket-type create counters '{"props":{"datatype":"counter"}}'
riak-admin bucket-type create maps '{"props":{"datatype":"map"}}'
riak-admin bucket-type create sets '{"props":{"datatype":"set"}}'
riak-admin bucket-type activate counters
riak-admin bucket-type activate maps
riak-admin bucket-type activate sets
  • 在您的 riak.conf 中启用搜索功能
search = on

我们还期望在提交拉取请求之前,您已运行测试以确保所有测试在您的更改后仍然通过。

要运行测试,克隆此存储库,然后从存储库根目录运行 composer update,然后您可以简单地通过运行 php vendor/bin/phpunit 来执行所有测试。

  • 要执行测试,请运行 ./vendor/bin/phpunit
  • 要检查代码标准,请运行 ./vendor/bin/phpcs -p --extensions=php --standard=ruleset.xml src