我使用 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数组是什么?谢谢!
答案 0 :(得分:2)
PRIMARY KEY (company,name)
Cassandra中的复合主键有多个部分。第一列(您的情况为company
)是您的partitioning key。这是有助于确定存储行的分区的关键。
复合主键的下一部分是clustering columns。群集列指示数据的磁盘排序顺序。在您的情况下,您只有一个聚类列(name
)。然后,您的行数据将由company
和name
的(假定的唯一)组合存储,您的数据将按name
排序(在磁盘上)。
在我的情况下,什么是行键?
您的案例中的行键是company
和name
的组合。
现在如何在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);