如何通过库php将数据插入Cassandra DB?

时间:2014-08-26 16:03:03

标签: php cassandra

我使用 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()的参数是关键行(员工是列族的名称,公司是关键),其他 - 是列的名称和值。 在这方面,我有几个问题:

在我的情况下,行键是什么?在我指定的“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")
);

我可以告诉我,在我的情况下,对于两个行键“name,company”,composire数组是什么?谢谢!

1 个答案:

答案 0 :(得分:2)

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);