Должен ли я сделать это поле GSI, обычным атрибутом или чем-то еще, чтобы иметь эффективные запросы?

Для моей таблицы DynamoDB в настоящее время у меня есть такая схема:

Ключ раздела - уникальный идентификатор, поэтому каждый элемент имеет полностью уникальный идентификатор.

Ключ сортировки - нет

Атрибут - JSON, содержащий некоторые значения

Теперь я хочу добавить новое поле, которое потребуется для каждого элемента и будет указывать конкретный регион (например, NA-1, NA-2, JP-1 и т. Д.) И Я хочу иметь возможность делать запросы только в этом поле. Например, мне может потребоваться выполнить запрос к моей таблице, чтобы получить все элементы с регионом NA-1.

Мой вопрос: следует ли мне сделать это поле GSI? Я новичок в DynamoDB, поэтому изучаю онлайн, и мне кажется, что использование GSI предпочтительнее, когда это поле может присутствовать только для выбранных элементов в таблице, но мое поле будет требоваться для каждого элемента , поэтому я думаю, что использование GSI - не вариант.

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

TL; DR Могу ли я как-нибудь добавить обязательное поле regionID в свою таблицу и выполнять эффективные запросы к нему? Какие хорошие варианты мне следует рассмотреть?


person EMS    schedule 25.07.2020    source источник
comment
Как вы думаете, сколько записей (элементов) вы собираетесь добавить в таблицу и каков размер каждого элемента?   -  person dellyjm    schedule 03.08.2020


Ответы (2)


Да, GSI, возможно, здесь не самый лучший вариант. Может можно как-нибудь сделать его частью ключа раздела?

person Kawaiiii    schedule 25.07.2020

да. Выполните 2 записи в таблицу. Первая строка будет тем, что вы сейчас пишете, а вторая строка будет иметь ваш регион в качестве ключа раздела. Не забывайте использовать транзакции, так как одна из операций записи может не удастся.

Хотя вы можете использовать GSI, вы должны понимать, что в конечном итоге он согласован. Для его обновления потребуется некоторое время, и вы можете получить несогласованные данные, если запросите достаточно скоро после записи.

person techriften    schedule 26.07.2020
comment
Как я могу иметь два отдельных ключа разделов в одной таблице? - person EMS; 29.07.2020