Хранение данных в динамической базе - PullRequest
1 голос
/ 18 марта 2019

Мне нужно хранить различные ключи данных в таблице DynamodB. Я использую node.js / AWS Lambda / Dynamodb.

Информация, которую я пытаюсь сохранить, будет выглядеть примерно так:

[
 {
  "boxname":"foo",
  "contents": [
   {
    "itemid":"1",
    "itemname":"apple",
    "itemamount":"7",
    "itemdateadded":"03-17-2019"    
   }
  ]
  "boxname":"bar",
  "contents": [
   {
    "itemid":"1",
    "itemname":"apple",
    "itemamount":"2",
    "itemdateadded":"03-16-2019"
   }
   {
    "itemid":"2",
    "itemname":"orange",
    "itemamount":"1",
    "itemdateadded":"03-17-2019"
   }
  ]
 }
]

в основном, поэтому я могу запросить позже, добавлять и удалять каждый элемент из каждой коробки ... У меня много проблем, когда я думаю, как это сделать! Кто-нибудь может помочь?

Ответы [ 2 ]

1 голос
/ 18 марта 2019

Таблица DynamoDB

Во-первых, вам нужно будет создать DynamoDB Table.Для этого вам понадобится минимально иметь таблицу Hash Key, которая действует как первичный ключ таблицы, вы также можете иметь дополнительный Range Key, который действует как составной первичный ключ таблицы

.boxname, кажется, хорошо вписывается в таблицу Hash Key

Вы можете сразу же создать DynamoDB Table, используя только Hash Key, поскольку все остальные атрибуты не нужно указывать заранее,новые / дополнительные атрибуты могут быть добавлены на лету при создании новых записей

Создать запись

Вы можете использовать API PutItem Для создания записи в DynamoDB

https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html

Записи запросов

Вы можете использовать API Query для запроса записей по хеш-ключу таблицы и, опционально, также по ключу диапазона

https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html

Сканирование записей

Используйте API Scan для сканирования записей по любым атрибутам Non Key, когда вы не можете выбратьзаписи на основе таблицы Hash Key и / или Range Key

Обычно не рекомендуется создавать структуру таблиц, в которой интенсивно используется API-интерфейс сканирования, поскольку он буквально выполняет операцию сканирования.Вместо этого рекомендуется структурировать таблицу, оптимизированную для операций с запросами

https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Scan.html

Получить запись

Вы можете использовать GetItem API для полученияодиночная запись с помощью хэш-ключа таблицы, а также дополнительно ключа диапазона

https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html

Надеюсь, что приведенная выше информация хороша для начала работы с DynamoDB

0 голосов
/ 18 марта 2019

Хотя boxname уникально, я категорически не согласен с тем, что он подходит для хеш-ключа (согласно ответу @ OhChinBoon).

Поскольку boxname - это только имя, это означает, что оно генерируется неравномерно (как UUID).Представьте, что ваши boxname были как Johan/Johanan/Johann/Johannes/Johdy/John.DynamoDB будет очень тяжело запросить эти ключи, если ваша таблица станет больше.

Я предлагаю вам добавить в вашу структуру новый атрибут, который будет отвечать за ваш хэш-ключ.Давайте назовем это id.

Теперь, если вам нужно запросить boxname, вы можете просто создать для него Global Secondary Index (GSI), что позволит избежать дорогостоящих операций.как сканирование (отметьте DynamoDB Best Practices , если необходимо).Используйте только сканирование в качестве крайней меры.

Исходя из вышеизложенного, ваша структура будет выглядеть следующим образом:

{
    "id": "7ba6d8b8-afef-440e-98a2-fee38a4e3381" (hash key)
    "boxname": "foo" (GSI),
    "contents": [{
        "itemid": "1",
        "itemname": "apple",
        "itemamount": "7",
        "itemdateadded": "03-17-2019"
    }]
}

Имейте в виду, что вы можете создавать GSI только для атрибутов верхнего уровня,Это означает, что вы не можете создать GSI для атрибута внутри JSON / Array.Так что, если вам в конечном итоге понадобится запросить что-то внутри contents, тогда DynamoDB может не подойти (хотя я не думаю, что это ваш случай, думаю, стоит упомянуть)

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