php-riak / riak-client
PHP 5.4 的 Riak 客户端
Requires
- php: >=5.4.0
- doctrine/annotations: ~1
- guzzlehttp/guzzle: ^5.3.1
- php-riak/riak-client-pb: ~1
Requires (Dev)
- instaclick/coding-standard: ~1.1
- instaclick/object-calisthenics-sniffs: dev-master
- instaclick/symfony2-coding-standard: dev-remaster
- php-mock/php-mock-phpunit: ^0.2
- phpunit/phpunit: ~4
- satooshi/php-coveralls: ~0.6
- squizlabs/php_codesniffer: ~1.5
This package is auto-updated.
Last update: 2024-08-29 04:39:28 UTC
README
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