m6web/cassandra-bundle

此包已被放弃,不再维护。没有建议的替代包。

基于 datastax/php-driver 的 Symfony2 扩展包

安装: 127,250

依赖者: 3

建议者: 0

安全性: 0

星标: 30

关注者: 39

分支: 27

开放问题: 0

类型:symfony-bundle

v3.0.0 2020-03-16 14:11 UTC

README

Build Status

CassandraBundle 提供一个作为 Symfony 服务器的 Cassandra 客户端。

安装

注意:您需要安装官方的 datastax php driver 扩展

使用 composer

composer require m6web/cassandra-bundle

然后确保您的应用中注册了此包

// config/bundles.php

return [
    \M6Web\Bundle\CassandraBundle\M6WebCassandraBundle::class => ['all' => true],
];

用法

在您的配置文件中添加 m6web_cassandra 部分。以下是所需的最低配置。

m6web_cassandra:
    clients:
        myclient:
            contact_endpoints:
                - 127.0.0.1
                - 127.0.0.2
                - 127.0.0.3
        

然后您可以向容器请求您的客户端

$cassandra = $this->get('m6web_cassandra.client.myclient');

$prepared = $cassandra->prepare("INSERT INTO test (id, title) VALUES(?, ?)");

$batch     = new Cassandra\BatchStatement(Cassandra::BATCH_LOGGED);
$batch->add($prepared, ['id' => 1, 'title' => 'my title']);
$batch->add($prepared, ['id' => 2, 'title' => 'my title 2']);

$cassandra->execute($batch);

$statement = new Cassandra\SimpleStatement('SELECT * FROM test');
$result = $cassandra->execute($statement);

foreach ($result as $row) {
    // do something with $row
}

$statement = new Cassandra\SimpleStatement('SELECT * FROM test');
$result = $cassandra->executeAsync($statement);

// do something while cassandra query running

foreach($result->get() as $row) {
    // do something with row
}

该包提供了一个用于从时间uuid字符串中提取日期时间的工具类。

use M6Web\Bundle\CassandraBundle\Cassandra\Type as TypeUtils;

$datetime = TypeUtils::getDateTimeFromTimeuuidString('513a5340-6da0-11e5-815e-93ec150e89fd');

if (is_null($datetime)) {
    // something is wrong with supplied uuid
} else {
    echo $datetime->format(\DateTime::W3C); // 2015-10-08 11:38:22+02:00
}

数据收集器

当启用 Symfony 分析器时,数据收集器可用。收集器允许您查看以下 Cassandra 数据

  • 键空间
  • 命令名称
  • 命令参数
  • 执行时间
  • 执行选项覆盖(一致性、序列一致性、页面大小和超时)

注意:数据收集器中报告的时间可能不是您使用异步调用(executeAsyncprepareAsync)时的实际执行时间

配置参考

m6web_cassandra:
    dispatch_events: true                 # By default event are triggered on each cassandra command
    clients:
        client_name:
            persistent_sessions: true     # persistent session connection 
            keyspace: "mykeyspace"        # default is null, optional keyspace to connect
            load_balancing: "round-robin" # round-robin or dc-aware-round-robin
            dc_options:                   # required if load balancing is set to dc-aware-round-robin
                local_dc_name: "testdc"
                host_per_remote_dc: 3
                remote_dc_for_local_consistency: false
            default_consistency: "one"    # 'one', 'any', 'two', 'three', 'quorum', 'all', 'local_quorum', 'each_quorum', 'serial', 'local_serial', 'local_one'
            default_pagesize: 10000       # ~ to disable pagination
            contact_endpoints:            # required list of ip to contact
                - 127.0.0.1
            contact_whitelist:            # if specified cassandra will connect only to this datacenters/hosts
                dc:
                    - "testdc"
                host:
                    - 172.0.0.1
            contact_blacklist:            # if specified cassandra will not connect to this datacenters/hosts
                dc:
                    - "blacklisted_testdc"
                host:
                    - 6.6.6.6
            port_endpoint: 9042           # cassandra port
            token_aware_routing: true     # Enable or disable token aware routing
            credentials:                  # cassandra authentication
                username: ""              # username for authentication
                password: ""              # password for authentication
            ssl: false                    # set up ssl context
            default_timeout: null         # default is null, must be an integer if set
            timeout:
                connect: 5 
                request: 5 
            retries:
                sync_requests: 0          # Number of retries for synchronous requests. Default is 0, must be an integer if set

        client_name:
            ...

贡献

首先,感谢您的贡献!

以下是您在维护者接受和合并您的请求之前应遵循的几条规则,以便更容易地进行代码审查。

  • 您必须遵循 Symfony2 编码标准:您可以使用 ./bin/coke 进行验证
  • 您必须运行测试
  • 您必须编写或更新测试
  • 您必须编写或更新文档

运行测试

安装 composer 开发依赖

$ composer install --dev

然后使用 atoum 单元测试框架运行测试

./bin/atoum