Хотя 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 может не подойти (хотя я не думаю, что это ваш случай, думаю, стоит упомянуть)