Как мне настроить ключи DynamoDB для таблицы потока действий

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

Последующее действие:

  • тип
  • ID пользователя
  • отметка времени
  • follower_user_id
  • followee_user_id

Комментарии

  • тип
  • ID пользователя
  • отметка времени
  • comment_id
  • commenter_user_id
  • commented_user_id

Для отображения потока я буду запрашивать user_id и упорядочивать по метке времени. Также будут другие типы запросов - например, мне иногда нужно будет запросить user_id AND type, а также такие вещи, как comment_id, follower_user_id и т. Д.

Итак, мои вопросы:

  1. Должен ли мой первичный ключ быть хешем и ключом диапазона с использованием user_id и timestamp?
  2. Нужен ли мне вторичный индекс для каждого другого элемента - например, comment_id или без индекса результаты вернутся достаточно быстро? Вторичные индексы ограничены 5, чего было бы недостаточно для всех типов запросов, которые мне нужно будет выполнить.

person nlyn    schedule 29.07.2013    source источник


Ответы (1)


Я бы подумал, можно ли сегментировать данные на две (или более) таблицы, что позволит лучше использовать ваши запросы. Объедините два по мере необходимости (и если), т.е. ваш тип станет вашей таблицей, а не дискриминатором, как в SQL.

Если вы не разделяете таблицы, то мои ответы будут

  1. Да, я думаю, что это будет лучший вариант, учитывая, что в большинстве случаев вы используете именно так.
  2. Нет. Но вам нужно учитывать, какие запросы являются наиболее частыми, и соображения производительности, связанные с ними. Какие из них должны быть эффективными, а какие «достаточно хорошими» достаточно хорошими?

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

person Pete - MSFT    schedule 07.08.2013