Моделирование схемы SQL для DynamoDB - PullRequest
0 голосов
/ 23 января 2019

В моем проекте AWS Lambda ежедневно отбирает данные из интернет-магазина и сохраняет их в MySQL.

Поскольку я хочу быть более рентабельным, я хочу использовать DynamoDB.

Как я хочу сделать запрос?

  • по productId (ясно)
  • по категориям (с новейшими списанными данными о продукте - цены, рейтинги и т. Д. ) - означает все товары в категориях папа, кухня и ножи

Подходит ли этот чехол для «Динамо»? Как бы выглядела модель?

Я имею в виду три подхода, но у каждого есть недостаток:

  1. Иметь две таблицы сначала для продукта со списанными данными, затем с категориями с продуктами. Это означает, что первый запрос позволяет определить продукты в категории, второй - получение данных о продукте + две таблицы в синхронизации.

  2. Одна таблица Ключ разделения на productId , ключ сортировки на отметке времени , и для каждого фрагмента я бы сохранил 3 строки для продукта , для каждой категории одна строка и сделать GLI для категории с отметкой времени в качестве ключа сортировки. Но если бы я выбрасывал 100 продуктов в день, каждый из которых в среднем по 8 категориям, это было бы 800 строк в день, просто чтобы иметь это отношение многих ко многим. Через месяц у меня будет 24k строк . Допустим, я хочу удалить одну категорию из продукта за месяц, мне нужно обновить 240 строк?

  3. Или этот случай не подходит для DynamoDB, было бы проще придерживаться MySQL?

Database Scheme

1 Ответ

0 голосов
/ 28 января 2019

вы можете использовать это в качестве таблицы.

productId | sortKey         |  GSI1     |
1234232   | event#123232323 |           | price1  | orders1 | rating1 | rating_count1 | created_at1
1234232   | event#123232327 |           | price2  | orders2 | rating2 | rating_count2 | created_at2
1234232   | category#father | Father    | <other properties of category>
1234232   | category#kitchen| kitchen   | <other properties of category?>

здесь productid является вторичным ключом GSI1.

Это решит следующие варианты использования

  1. Для одного продукта смотрите историю событий.(SELECT *, где id = X и sortKey начинается с события)

  2. Получить все категории продукта.(ВЫБЕРИТЕ * где id = X и sortKey начинается с категории)

  3. Получить все товары в одной категории.(ВЫБРАТЬ *, где GSI1 = x)

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

Вот хорошее видео , объясняющее схемудизайн.

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