Apache Cassandra - одна из самых популярных баз данных NoSQL. Однако он не самый простой в использовании.

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

Пожалуйста, также взгляните на мой другой пост в блоге о 7 ошибках при использовании Apache Cassandra. Здесь вы можете узнать о лучших практиках, а также о шаблонах, которых следует избегать.

Как моделировать данные в Apache Cassandra?

У Кассандры довольно специфическая методология моделирования. Вместо того чтобы начинать с сущностей и отношений, вы должны начать с запросов. Да, прежде чем вы начнете работать над проектом, вы должны знать все представления и данные, которые должны быть на них. Во многих случаях это просто невозможно. Зачем это нужно? Cassandra была разработана как очень производительная и горизонтально масштабируемая база данных. Однако это ввело ограничения на то, как можно запрашивать данные. Вот почему все таблицы с самого начала предназначены для использования в качестве основы для конкретных представлений или запросов. Нередко можно увидеть несколько денормализованных таблиц, содержащих одни и те же данные, просто организованные по разным ключам, чтобы они могли запрашивать их.

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

Что такое материализованные представления Кассандры?

Материализованные представления (MV) были представлены в Cassandra 3.0. Они были разработаны как альтернативный подход к денормализации данных вручную. Вместо создания нескольких таблиц, определенных с разными ключами разделов, можно определить одну таблицу и несколько представлений для нее. Каждый первичный ключ материализованного представления должен включать все столбцы из первичного ключа исходной таблицы, хотя они могут иметь разный порядок, что позволяет пользователю запрашивать данные по разным столбцам. Некоторые функции, такие как фильтрация по столбцу, не входящему в первичный ключ исходной таблицы, были добавлены позже, например в Кассандре 3.10.

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

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

Каковы недостатки материализованных представлений Cassandra?

Основные проблемы связаны с несогласованностью данных.

  • Когда вы меняете данные в своей таблице, Cassandra должна обновить данные в материализованном представлении. Иногда это может не получиться. К сожалению, не существует механизма, позволяющего это проверить, поэтому данные могут не синхронизироваться.
  • Что еще хуже, если это произошло, это невозможно исправить, не отбрасывая весь вид - CASSANDRA-10346.
  • Не рекомендуется использовать добавочный ремонт вместе с материализованными представлениями - CASSANDRA-12888
  • В некоторых случаях могут встречаться ошибки Недостаточно памяти - CASSANDRA-12783.
  • До 3.0.15 / 3.11.1 повреждения могли произойти при перемещении узлов - CASSANDRA-13069 или данные не могли быть должным образом удалены - CASSANDRA-11500.
  • И многие другие".

Выводы и будущее Кассандры

Это довольно страшно, но существуют системы, которые все еще используют материализованные представления, и в большинстве случаев, вероятно, даже неизвестно, действительно ли данные синхронизированы (да, мы видели их собственными глазами). Среди наиболее широко известных библиотек Akka Persistence Cassandra некоторое время в прошлом использовала MV, а затем мигрировала.

К счастью, надежда есть! Одна из целей Cassandra 4.0 - исправить некоторые из упомянутых ошибок. Точная дата выхода пока неизвестна, но июль принес нам версию 4.0 beta. Лично я все еще буду осторожен в течение некоторого времени после финального релиза. Если можете, возможно, подумайте о переносе MV.

Like this post and interested in learning more?
Follow us on Medium!
Need help with your Cassandra, Kafka or Scala projects?
Just contact us here.