Сейчас я изучаю Кассандру, и я понимаю, что должен составлять таблицу для каждого запроса. Я не уверен, когда я должен делать отдельные таблицы или материализованные представления. Например, у меня есть следующие вопросы для пользователей и сообщений:Когда использовать материализованные виды?
users_by_id users_by_email users_by_session_key
posts_by_id posts_by_category posts_by_user
Должен ли я всегда использовать материализованные представления?
Мне кажется, что если вы хотите, чтобы сообщения или пользователи были согласованы по всем запросам, я должен использовать материализованные представления. Однако материализованные представления, которые я читаю, имеют задержку read before write
.
С другой стороны, если я использую разные таблицы, я должен делать 3 вставки каждый раз, когда создается новое сообщение? Я заметил, что получаю ошибку batch with conditions cannot span multiple tables
, что означает, что я должен вставлять ее по одному в каждую отдельную таблицу, что может вызвать проблемы согласованности, если один из запросов не удался. (Оператор партии, не смог бы все 3, если один из них не удался).
Итак, поскольку имеет смысл иметь согласованность, то мне кажется, что я всегда буду хотеть использовать материализованные виды и должен принять штраф read before write
.
Я предполагаю, что мой другой вопрос - когда это будет когда-нибудь, если данные будут непоследовательными?
Так надеясь, что кто-то может предоставить мне больше ясности за то, как обрабатывать несколько запросов в кассандре на «теоретической модели», такой как «Пользователи» или «Сообщения». Должен ли я использовать материализованные представления? Если я использую 3 разных таблицы для каждой модели, как я могу их поддерживать? Просто надеюсь, что все 3 вставки не подведут? Кажется неправдой.
В вашем первом абзаце вы упомянули, что компромисс - это время против производительности. У меня есть время, поэтому я хотел бы сделать эти 3 разных таблицы вместо материализованных представлений. Однако Im все еще путает то, что является правильным способом сохранить данные в таблице 3 Posts. (Btw i не означает согласованность между репликами, когда я говорю о согласованности, но согласованность данных для таблиц 3 Posts). Я беспокоюсь, что мой сервер делает 3 вставки для создания сообщения, но в какой-то момент мой сервер терпит неудачу. Теперь у меня есть «posts_by_id», но нет таблицы «posts_By_category». Итак, как бы я обрабатывал согласованность данных из 3 таблиц? –
Вы можете сделать две вещи: использовать QUOURUM или создать процесс пакетного восстановления. Первый из них прост в реализации: https://docs.datastax.com/en/cassandra/2.0/cassandra/dml/dml_config_consistency_c.html Для второго вам нужна система очереди сообщений, такая как kafka. Вы создаете приложение для быстрой обработки потока. Второе приложение в поточном потоке выполняет только одно: восстановление сломанных таблиц. Второе решение действительно быстрое, приятное для аналитики в реальном времени, но первое из них более безопасно. Я думаю, в вашем случае первый вариант - лучший выбор. –