表在卡桑德拉中共享分区("low level rows")吗?



假设我有两个通过CQL定义的表(列族)。

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行?

将有2个。

Cassandra中的数据被写入"memtables",然后刷新到磁盘上的"SSTables"。memtables和SSTables都是在每个列族的基础上维护的,因此不同列族(表)中的行将始终在存储级别创建不同的行。

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

Cassandra写入首先写入提交日志(为了持久性),然后是称为memtable的内存中表结构。书写是一旦它被写入提交日志和内存,就会成功,因此在写入时是非常小的磁盘I/O。写入是批处理的内存,并定期写入磁盘到持久表称为SSTable(排序字符串表)的结构。Memtables和SS表按列族进行维护。Memtables的组织方式按行键排序并按顺序刷新到SSTables(否如在关系数据库中的随机搜索)。

最新更新