Как смоделировать форум, используя Amazon DynamoDB без хот-разделов? - PullRequest
2 голосов
/ 25 марта 2019

Документация AWS DynamoDB включает пример схемы для форума .Однако число вопросов, на которые эта схема может ответить, кажется очень небольшим.Кроме того, таблица, похоже, страдает от проблемы «горячих клавиш» (пакет ответов копируется в тот же раздел).

В заголовке доклада «Расширенные шаблоны проектирования для Amazon DynamoDB» докладчик около 43 минут разбивает сложный вариант использования от Audible, использующий только одну таблицу с 3 GSI (индексами).

Я пытаюсь изучить правильное моделирование DynamoDB, исходящее из стандартного RDBMS 3NF фона.Как бы был разработан форум для предотвращения горячих разделов при одновременном удовлетворении этих распространенных вариантов использования?

Запросы:

  • Темы по форуму (отсортировано по дате публикации или по последнему ответу))
  • Ответы по темам (отсортировано по дате публикации с нумерацией страниц)
  • Ответы пользователя (отсортировано по дате публикации)
  • Темы по пользователю (отсортировано по дате публикации)
  • Темы с наибольшим количеством голосов

Базовая схема (?):

  • Форум: Ключ раздела: Forum_GUID.Атрибуты: Имя, Desc
  • Пользователь: Ключ раздела: User_GUID.Атрибуты: email, join_date
  • Тема: Составной ключ: Forum_GUID, Topic_GUID.Атрибуты: posts_by, дата, голоса, тело, тема
  • Ответ: Составной ключ: Topic_GUID, Reply_GUID.Атрибуты: posts_by, дата, голоса, тело

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

1 Ответ

2 голосов
/ 26 марта 2019

enter image description here

Вы можете использовать вышеуказанную схему. Теперь для вас запросы

  1. Темы по форуму (отсортировано по дате публикации или последнему ответу)

    Select from GSI2 where GSI2 pk=Forum123 and sortby GSI2 SK
    

    Вы можете выбрать, кого оставить в GSI2 ​​Sk. Последний ответ / дата публикации, в зависимости от того, какой вариант использования часто запрашивается.

  2. Ответы по темам (отсортировано по дате публикации с нумерацией страниц)

    Select where pk=topic and sk startswith reply and sortby sk
    
  3. Ответы пользователя (отсортировано по дате публикации)

    Select from GSI2 where pk=User123 and sk startswith reply and sortby sk
    
  4. Темы пользователя (отсортировано по дате публикации)

    Select from GSI2 where pk=User123 and sk startswith topic and sortby sk
    
  5. Тем с наибольшим количеством голосов
This will require another GSI if you want to do this operation across multiple forums. but This GSI will certainly suffer from hot key issue. since there will be only one key. Instead of doing that, you can keep one fixed key value in your table who keeps these counts. and these values are updated by an async process.
...