Должен ли Dynamodb применять дизайн одной таблицы вместо дизайна нескольких таблиц, когда объекты не являются реляционными

#amazon-web-services #database-design #nosql #amazon-dynamodb

#amazon-web-services #database-design #nosql #amazon-dynamodb

Вопрос:

Предположим, что для текущей базы данных в основном 3 таблицы.

Pkey = ключ раздела

Admin
-id (Pkey), имя пользователя, адрес электронной почты, createdAt, updatedAt

Идентификатор баннера (Pkey), isActive, createdAt, заголовок

Новости
-идентификатор (Pkey), createdAt, isActive, заголовок, сообщение

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

Согласно документу aws

 You should maintain as few tables as possible in a DynamoDB application.
 

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-general-nosql-design.html

Итак, я рассматривал необходимость объединения этих 3 таблиц в одну таблицу.

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

Комментарии:

1. Моделирование данных NoSQL само по себе может быть предметом изучения. На эту тему написаны целые книги. Чтобы быстро начать работу, я настоятельно рекомендую посмотреть этот вводный доклад о моделировании данных DDB: youtube.com/watch?v=DIQVJqiSUkE

2. Этот вопрос задавался и на него отвечали несколько раз здесь, на SO, но я просто хочу подчеркнуть одну вещь: «приложение» может означать несколько вещей: для достаточно сложных примеров, где дизайн имеет наибольшее значение, у вас может быть служба, которая занимается администрированием и авторизацией, и отдельная служба, которая занимается новостямии, возможно, баннеры: в этом случае наиболее целесообразно использовать отдельные ресурсы для каждой службы

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

Ответ №1:

DynamoDB — это база данных NoSQL, поэтому вы разрабатываете свою схему специально для выполнения наиболее распространенных и важных запросов как можно быстрее и дешевле. Ваши структуры данных адаптированы к конкретным требованиям ваших бизнес-сценариев использования.

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

Два интересных ресурса, которые помогут вам начать работу, — это From SQL to NoSQL и NoSQL Design для DynamoDB, оба являются частью документации разработчика AWS для DynamoDB.

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

Обновление, добавьте пример дизайна таблицы, чтобы начать: Агрегированный вид таблицы

Комментарии:

1. Значит, я могу сохранить дизайн с несколькими таблицами?

2. Я имею в виду, что вы можете использовать только одну таблицу.

3. Можете ли вы также привести пример того, как я создаю свою единую таблицу, используя мою текущую таблицу? Спасибо

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

5. Спасибо. Но в чем причина того, что в качестве ключа раздела не используется тип (admin, news), вместо этого используется случайный идентификатор