DynamoDB - Группировка разделов или шардинг? - PullRequest
2 голосов
/ 04 июля 2019

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

Возьмем следующий пример, где у нас есть пользователь, у которого есть контакты и счета внутри его раздела:

enter image description here

Итак, если мне понадобятся все счета пользователя user_001, я просто сделаю запрос (псевдо):

QUERY WHERE PartitionKey = "user_001" AND SortKey.begins_with("invoice_")

Но недавно я заметил, что при использовании описанного выше способа возникает довольно серьезная проблема.

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

Это может оказаться очень неэффективным, если у вас слишком большой раздел, скажем, у меня было 10 000 контактов и 2 счета-фактуры, и получение этих двух счетов-фактур может оказаться очень дорогостоящим.

Я предполагаю, что это основано на цитате из документов:

DynamoDB рассчитывает количество единиц считываемой емкости на основе размер элемента, а не количество данных, возвращаемых применение

Решение:

enter image description here

Разве это не лучший подход?

1) Это лучше разделяет данные, поэтому мне не нужно использовать start_with

2) Это позволяет мне использовать uuid, основанный на времени, в качестве ключа сортировки и включить более сложное упорядочивание / разбиение на страницы

3) Я буду использовать гораздо меньше ресурсов для запросов, так как не нужно будет проходить пункты, которые мне не нужны

В чем вопрос?

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

Но я действительно думаю, что рисунок 2 здесь лучший, особенно если учесть, что теперь DynamoDB разумно распределяет емкость по вашим разделам (и не равномерно, как раньше)

Итак, мои мысли о том, что картинка 2 намного лучше, чем 1, действительны?

1 Ответ

0 голосов
/ 05 июля 2019

Вы ошиблись - цитируемая вами документация применима к выражениям фильтра.

Если у вас есть условие, которое применяется к ключу сортировки, это должно быть частью выражения запроса, а не выражением фильтра.

...