CQL - строки с разными столбцами
Можно ли хранить в Cassandra (используя CQL) две строки в одном семействе столбцов с одинаковым количеством столбцов, но с одним другим столбцом? Что-то вроде этого:
// column family
'users' : {
// row 1
'john' : {
name: 'John',
lastname: 'Smith',
email: 'john@gmail.com'
}
// row 2
'jack' : {
name: 'Jack',
lastname: 'Sparrow',
age: 33
}
}
Мой текущий код CQL:
CREATE KEYSPACE people WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };
USE people;
CREATE COLUMNFAMILY users (
username varchar PRIMARY KEY,
name varchar,
lastname varchar,
email varchar
);
INSERT INTO users (username, name, lastname, email) VALUES ('john', 'John', 'Smith', 'john@gmail.com');
ALTER TABLE users DROP email;
ALTER TABLE users ADD age int;
INSERT INTO users (username, name, lastname, age) VALUES ('jack', 'Jack', 'Sparrow', 33);
SELECT * FROM users;
OUTPUT:
username | age | lastname | name
----------+------+----------+------
john | null | Smith | John
jack | 33 | Sparrow | Jack
1 ответ
Решение
Кассандра имеет разреженную модель данных. Мы не будем создавать ячейку в базовом sstable, если вы не вставите значение для данной строки cql.
То есть, если бы вы не сказали "ОТПРАВИТЬ электронную почту", у Джека не было бы пустой ячейки для электронной почты, если вы не умышленно вставили нуль / надгробную плиту.
Вы можете изучить sstables, используя sstable2json
чтобы понять, как данные выложены на диске. Не забудьте использовать nodetool flush
прежде чем вы попробуете это, или вы можете в конечном итоге исследовать пустой каталог!