Я изучаю NoSql и работаю с Кассандрой.В моем наборе тестовых данных у меня есть вопросы, каждый из которых может ссылаться на одну или несколько тем (легкий клон-кора с реляционной моделью, показанной ниже).
Например, вопрос об управлении памятью в 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.
Это разумная модель?