假设我有两个通过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(否如在关系数据库中的随机搜索)。