2014-10-17 21 views
3

比方说,我有两个表(列家族)通过CQL定义。Cassandra中的表是否共享分区(“低级别行”)?

CREATE TABLE a (
    pk uuid, 
    cka int, 
    val text, 
    PRIMARY KEY (pk, cka) 
); 

CREATE TABLE b (
    pk uuid, 
    ckb text, 
    val1 boolean, 
    val2 decimal, 
    PRIMARY KEY (pk, ckb) 
); 

如果我现在行插入每个表使用相同的分区键:

INSERT INTO a (pk, cka, val) 
    VALUES ('f47ac10b-58cc-4372-a567-0e02b2a3d379', 5, 'hi'); 

INSERT INTO b (pk, ckb, val1, val2) 
    VALUES ('f47ac10b-58cc-4372-a567-0e02b2a3d379', 'x', 'hello', 'hey'); 

会不会有现在是已在存储1个或2行?

回答

3

将提供卡桑德拉2.

数据写入到磁盘上的“memtables”,然后刷新到“SSTables”。 memtables和SSTable在每个列家庭基础上保持,因此不同列家族(表)中的行将始终在存储级别创建不同的行。

参见http://www.datastax.com/docs/1.1/dml/about_writes

卡桑德拉写入被首先写入到提交日志(耐久性), ,然后在内存中的表结构称为memTable中。写入写入提交日志和内存后,写入成功,因此 是写入时最小的磁盘I/O。写入内容为 ,并定期写入磁盘到永久表 结构称为SSTable(排序后的字符串表)。 Memtables和 SSTables是按列系列维护的。 Memtables按 排序,按行键排序并顺序刷新到SSTables(没有 随机在关系数据库中查找)。

相关问题