【问题标题】:How insert data to Cassandra DB via library php?如何通过库 php 将数据插入 Cassandra DB?
【发布时间】:2014-08-27 10:02:29
【问题描述】:

我使用 Cassandra-PHP-Client-Library 库 将数据获取/设置到 Apache Cassandra。 我通过 cqlsh coomanda 行创建了一个键空间名称:

CREATE TABLE employees (
  company text,
  name text,
  age int,
  role text,
  PRIMARY KEY (company,name)
);

然后也通过命令行插入了一些列:

INSERT INTO employees (company, name, age, role) VALUES ('OSC', 'eric', 38, 'ceo');
INSERT INTO employees (company, name, age, role) VALUES ('OSC', 'john', 37, 'dev');

现在我尝试从 php 插入任何数据,为此我使用库的方法 set()

$this->cassandra->set(
            'employees.company',
            array(
                'company' => 'alicerozenberg@gmail.com',
                'name'    => 'Alice Rozenberg',
                'age'     => 45,
                'role'    => 'ddd'
            )
        );

在官方手册中说函数set()的first参数是key row(employees是列族的名字,company是key),other - 是列的名称和值。 对此,我有几个问题:

在我的情况下,行键是什么?在我指定的“CREATE”命令中,主键是“company,name”。但这不适合在函数中使用。此选项不起作用:

$this->cassandra->set(
                'employees.name',
...

$this->cassandra->set(
                'employees.company',
...

我改为 phpcassa 库,并对复合类型有疑问:

来自教程示例: https://github.com/thobbs/phpcassa/blob/master/examples/composites.php

// Insert a few records
$key1 = array("key", 1);
$key2 = array("key", 2);

$columns = array(
    array(array(0, "a"), "val0a"),

    array(array(1, "a"), "val1a"),
    array(array(1, "b"), "val1b"),
    array(array(1, "c"), "val1c"),

    array(array(2, "a"), "val2a"),

    array(array(3, "a"), "val3a")
);

谁能告诉我,对于两个行键“名称,公司”,我的情况是什么组合数组?谢谢!

【问题讨论】:

    标签: php cassandra


    【解决方案1】:
    PRIMARY KEY (company,name)
    

    Cassandra 中的复合主键有多个部分。第一列(在您的情况下为company)是您的partitioning key。这是有助于确定该行存储在哪个分区上的键。

    复合主键的下一部分是clustering columns。聚类列指示数据的磁盘排序顺序。在您的情况下,您只有一个聚类列 (name)。然后,您的行数据将由companyname 的(假定是唯一的)组合存储,并且您的数据将按name 排序(在磁盘上)。

    在我的情况下,行键是什么?

    您的情况中的 行键companyname 的组合。

    现在你如何在你的 PHP (PHPCassa?) 代码中设置它?我不太确定。但从我在这篇名为 Cassandra PHPCassa & Composite Types 的博文(警告:它已有几年历史)上读到的内容,您可能需要将 rowkey 定义为一个数组,如下所示:

    $this->cassandra->set(
            array('employees.company','employees.name'),
            array(
                'age'     => 45,
                'role'    => 'ddd'
            )
        );
    

    试试看是否有帮助。否则,请参考我上面链接的文章。

    根据您最近的编辑,我认为您的键定义如下所示:

    $key = array("alicerozenberg@gmail.com", "Alice Rozenberg");
    $columns = array(45,"ddd");
    $cf->insert($key, $columns);
    

    【讨论】:

    • 感谢您的回复。但我不使用 phpcassa 库。但是,我尝试了您的解决方案,它不起作用。脚本显示致命错误:未捕获的异常“CassandraInvalidPatternException”和消息“无法设置“数组”,应在...中使用句号分隔的列族名称和键名”
    • 所以,我将我的库更改为 phpcassa,看看还有更多选项
    • @Alice 将您的密钥设置为数组不起作用?你的图书馆一定有办法做到这一点。
    • 我更改为 phpcassa 库并编辑了我的问题
    • 从这里是对象 $cf ,为什么键是数组 $key 的值?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 2021-09-23
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多