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 прежде чем вы попробуете это, или вы можете в конечном итоге исследовать пустой каталог!

Другие вопросы по тегам