Моделирование "немногие ко многим" в Кассандре или других городах. - PullRequest
0 голосов
/ 07 июня 2019

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

Approximate relational model

Например, вопрос об управлении памятью в C ++ может касаться тем «Программирование на C ++», «Разработка программного обеспечения» и «Биты иБ».Мне нужна модель, которая будет поддерживать запрос, который возвращает все вопросы, которые относятся к определенной теме.Наивная модель может иметь следующую таблицу:

ReferencesTopic: name="<topic>", value=”{questionId[]}”

Тогда поиск по любой теме вернет JSON-BLOB со списком questionId для вопросов, которые ссылаются на эту тему.Однако это отношение «многие к нескольким» (возможно, 200 тем, каждая тема с миллионами вопросников), и поэтому оно кажется очень неэффективным.

Я думал о том, чтобы сегментировать HasTopics для заданноготема, возможно, с 1000 вопросников на сегмент.Это будет иметь две таблицы:

TopicSegments:           name="<topic>", value="{topicSegmentId[]}"
ReferencesTopicSegment:  name=<topicSegmentId>, value="{questionId[]}"

Преимущество заключается в возможности легко запрашивать самые последние n вопросов по данной теме, поскольку самый последний topicSegmentId находится внизу списка topicSegmentId.

Это разумная модель?

1 Ответ

0 голосов
/ 07 июня 2019

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

  • Cassandra не имеет соединений или связей внешних ключей, так какСУРБД.
  • Дизайн схемы должен основываться на том, как вы собираетесь выполнять запросы.
  • Денормализация обязательна, с Кассандрой можно иметь дублированные данные.

В сети есть несколько ресурсов, которые помогут вам понять эту новую парадигму, например правила моделирования данных , DS201 в Datastax Academy , для вашего примера с обработкой комментариев вы должнытакже посмотрите в этом сообщении от Последний рассол относительно временного ряда

...