Смешивание типов столбцов в Cassandra/широкие строки

Я пытаюсь узнать, как реализовать ленту в кассандре (например, в твиттере). Я хочу использовать широкие строки для хранения всех сообщений, сделанных пользователем. Я думаю о добавлении информации о пользователе или статистической информации в той же строке (количество сообщений, дата последнего сообщения, имя пользователя и т. д.).

Мой вопрос: имя, возраст и т. Д. «Имя поля» хранятся в столбце? Или эти широкие строки хранят только указанные имя столбца и значения? Я зря трачу место на диске? Я как-то компрометирую производительность?

Спасибо!

-- СОЗДАНИЕ ТАБЛИЦЫ

CREATE TABLE user_feed (
    owner_id int,
    name text,
    age int,
    posted_at timestamp,
    post_text text,
    PRIMARY KEY (owner_id, posted_at)
);

-- ВСТАВКА ПОЛЬЗОВАТЕЛЯ

insert into user_feed (owner_id, name, age, posted_at) values (1, 'marc', 36, 0);

-- ВСТАВКА ПОЛЬЗОВАТЕЛЬСКИХ ПОСТОВ

insert into user_feed (owner_id, posted_at, post_text) values (1, dateof(now()), 'first post!');
insert into user_feed (owner_id, posted_at, post_text) values (1, dateof(now()), 'hello there');
insert into user_feed (owner_id, posted_at, post_text) values (1, dateof(now()), 'i am kind of happy');

-- ПОЛУЧЕНИЕ ФИДА

select * from user_feed where owner_id=1 and posted_at>0;

-- РЕЗУЛЬТАТ

 owner_id | posted_at                | age  | name | post_text
----------+--------------------------+------+------+--------------------
        1 | 2014-07-04 12:01:23+0000 | null | null |        first post!
        1 | 2014-07-04 12:01:23+0000 | null | null |        hello there
        1 | 2014-07-04 12:01:23+0000 | null | null | i am kind of happy

-- ПОЛУЧЕНИЕ ИНФОРМАЦИИ О ПОЛЬЗОВАТЕЛЕ - ОТПРАВЛЯЕТСЯ ТОЛЬКО ИНФОРМАЦИЯ О ПОЛЬЗОВАТЕЛЕ_AT=0

select * from user_feed where owner_id=1 and posted_at=0;

-- РЕЗУЛЬТАТ

 owner_id | posted_at                | age  | name | post_text
----------+--------------------------+------+------+--------------------
        1 | 1970-01-01 00:00:00+0000 |   36 | marc |               null

person Marc    schedule 04.07.2014    source источник


Ответы (1)


Как насчет того, чтобы сделать их статичными?

Статический столбец одинаков во всех ключах раздела, и, поскольку ключ вашего раздела является идентификатором владельца, вы можете не тратить место впустую и получать информацию о пользователе в любом запросе.

CREATE TABLE user_feed (
    owner_id int,
    name text static,
    age int static,
    posted_at timestamp,
    post_text text,
    PRIMARY KEY (owner_id, posted_at)
);

Привет, Карло

person Carlo Bertuccini    schedule 04.07.2014
comment
Это похоже на хорошую идею, я не знал статических столбцов. У меня вопрос, который я не смог решить в документации: статические столбцы хранятся только один раз в строке, или они повторяются в каждом столбце? Спасибо! - person Marc; 04.07.2014
comment
AFAIK записывается только один раз в строке. Из документации Статический столбец — это специальный столбец, который используется всеми строками одного и того же раздела. Фактически, для обновления статического столбца вам не нужно указывать все поля ключа, а только ключ раздела. - person Carlo Bertuccini; 04.07.2014
comment
такой простой и понятный ответ именно то, что я искал после долгих поисков в Google! - person dtrihinas; 17.03.2015