Кассандра, Неужели мне придется писать так много?

#cassandra

Вопрос:

У меня есть 5 столов:

 users_by_id
users_by_username
users_by_email
users_by_likes
users_by_followers
 

Я должен писать 5 заявлений каждый раз, если пользователь зарегистрировался. Разве это не дорого или плохо ?

 INSERT INTO users_by_id (...) values (..)
INSERT INTO users_by_email (...) values (..)
INSERT INTO users_by_username (...) values (..)
INSERT INTO users_by_likes (...) values (..)
INSERT INTO users_by_followers (...) values (..)
 

Второй вопрос: Может быть, я обновляю users_by_id, мне нужно написать 5 обновлений. Есть ли другое решение? Или это не так уж плохо ?

Ответ №1:

Кассандра выступает за денормализацию ваших данных и создание модели данных в соответствии с вашими запросами. Вам придется написать свою модель данных таким образом, чтобы она удовлетворяла всем запросам с хорошей производительностью. Для повышения производительности (из-за своей архитектуры и дизайна) Кассандра запрашивает запись и чтение с помощью ключа раздела.

Не дорого написать 5 вставок для одного и того же набора данных в 5 разных таблицах. Ваши операции чтения будут выполняться лучше, и по мере увеличения размера данных до веб-масштаба вы будете благодарны за свое решение создать 5 таблиц и записать в них.

Вы можете изучить материализованные представления (Материализованное представление и ссылка Datastax для материализованного представления, но помните, что это экспериментальная функция. Поэтому вы должны правильно понять это, а также определить открытые проблемы с материализованными представлениями.

Я бы рекомендовал вам изучить модель данных Cassandra, которая облегчит понимание.

Ответ №2:

Cassandra предназначена для интенсивной записи базы данных, поэтому не стесняйтесь дублировать свои данные. Всегда следует создавать таблицы для запросов на чтение. Если одна таблица удовлетворяет одному запросу, это прекрасный дизайн.

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

Например, ниже приведен дизайн таблицы

 CREATE TABLE user_by_email (
email text,
timestamp timestamp,
name text,
fullname text,
userId text,
PRIMARY KEY (email,timestamp)
) WITH CLUSTERING ORDER BY (timestamp DESC);

INSERT INTO user_by_email (email, DateTime.Now ........)
 

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

Комментарии:

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