Запрос и фильтрация многих ко многим в Dynamodb - PullRequest
0 голосов
/ 27 августа 2018

Я новичок в DynamoDb (и No-SQL в целом) и все еще испытываю некоторые трудности при разработке моей модели данных.

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

Итак, до сих пор я пришел со следующим решением:

  • У меня естьтаблица Users с уникальным идентификатором
  • таблица Events с уникальным идентификатором
  • таблица EventAttendeeds с полями
    • EventId и UserId
    • Первичный ключ для EventId (HASH) + UserId (RANGE) => Позволяет мне сказать, кто собирается на данное событие
    • Глобальный вторичный индекс для UserId (HASH) + EventId (RANGE) => Позволяет сказать, на какие события пойдет пользователь.

Пока все хорошо.Эта проблема возникает, когда мне нужно указать, на какие события пользователь пойдет за данный месяц, упорядочить по дате.Например: какие события будет посещать пользователь 123 в этом месяце (например, чтобы показать его в календаре).

Единственный вариант, который мне пришел в голову, - это денормализовать данные и добавить копию eventDateполе из моей таблицы событий в таблицу EventAttendees, а затем добавить глобальный вторичный индекс на UserId (HASH) + eventDate (RANGE).

Мне не очень нравится это решение из-за сложногоработа по синхронизации данных (например, если дата события меняется, мне нужно обновить все записи, относящиеся к этому событию в таблице EventAttendeeds).

Есть ли другой способделать то, что я пытаюсь достичь?

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

Спасибо!

РЕДАКТИРОВАТЬ:

Еще один вариант, который пришел мне в голову.Обычно событие не посещают более чем несколько пользователей.Так что я думал об избавлении от «таблицы соединений», которая в базе данных NoSql имела бы больше смысла, я думаю.Проблема с этим во время запроса к БД, когда мне нужно найти события для данного пользователя.Это заставило бы использовать выражение фильтра;что может замедлить запрос.Какие еще варианты у меня есть?Я также думал об использовании Elastic Search для поиска по тексту и т. Д., Поэтому я также подумывал об использовании его для этой цели (поиск событий для данного пользователя за определенный месяц) ... Я бы принес идентификаторы, а затем использовалобычный запрос DynamoDb.Это звучит как излишнее ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...