Модель базы данных DynamoDB для хранения различных объектов - PullRequest
1 голос
/ 25 октября 2019

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

Я хочу получить все транспортные средства фильтрами как:

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

После прочтения официальной документации и других страниц с примерами (https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-general-nosql-design.html#bp-general-nosql-design-approach, https://medium.com/swlh/data-modeling-in-aws-dynamodb-dcec6798e955, Отдельные таблицы и списки карт - DynamoDB ), они сказали, что лучшие проекты используют только одну таблицу для хранения всего, поэтому я получаю модель, подобную следующей ниже:

-------------------------------------------------------------------------------------
Partition key |          Sort key     | Specific attributes for each type of vehicle
-------------------------------------------------------------------------------------
    cars      | date#brand#year#model | {main attributes for the car}
    bikes     | date#brand#year#model | {main attributes for the bike}
-------------------------------------------------------------------------------------

Я использовал составной ключ сортировки, потому что они указывают, чтоХорошая практика для поиска данных (https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-sort-keys.html).

Но после определения моей модели я получаю проблему, что у предыдущей модели возникла проблема под названием «Горячая точка» или «Ключ Hoy». (https://medium.com/expedia-group-tech/dynamodb-data-modeling-c4b02729ac08,https://dzone.com/articles/partitioning-behavior-of-dynamodb) потому что в официальном документеВо избежание этой проблемы рекомендуется использовать ключи разделов с высокой степенью кардинальности.

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

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

1 Ответ

1 голос
/ 25 октября 2019

Несколько вещей ...

горячие разделы, вступают в игру только , если у вас есть несколько разделов ...

Только потому, что у вас есть несколько разделов(хэш) ключи, не означает автоматически, что DDB потребуется несколько разделов. Вам также понадобится более 10 ГБ данных и / или более 3000 RCU или 1000 WCU.

Далее, DDB теперь поддерживает «Adaptive Capacity», поэтому горячие разделы не так сложны, какони были. почему то, что вы знаете о DynamoDB, может быть устаревшим

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

Последнее замечание: у вас может сложиться впечатление, что ключ данного раздела (хеша) может содержать не более 10 ГБ данных. Это верно, если ваша таблица использует локальные вторичные индексы (LSI), но в противном случае это не так. Таким образом, рассмотрите возможность использования глобальных вторичных индексов (GSI). С GSI связаны дополнительные расходы, поэтому стоит подумать.

...