DynamoDB лучшая практика для получения большого подмножества данных - PullRequest
0 голосов
/ 04 сентября 2018

Скажем, у меня есть одна таблица с 50000 элементов, а PK для каждой записи - это уникальный номер. Половина этих элементов имеет свойство «опубликовано», установленное на «1», а другое - «0».

Большую часть времени я буду извлекать отдельные элементы, используя хэш-ключ, но иногда я хочу иметь возможность получить ВСЕ элементы, где опубликовано = 1 или 0 (в идеале, с разбивкой по страницам).

Я мог бы иметь GSI с PK на атрибуте «опубликовано», но тогда у меня было бы 25 000 записей на значение, что, как я понимаю, было бы плохо, потому что PK должны быть более уникальными, чем эта (пожалуйста, дайте мне знать, если я ' Я понял это неправильно).

У меня могут быть отдельные таблицы для опубликованных / неопубликованных, но в моем обычном случае получения отдельных элементов я бы предпочел не знать заранее, был ли элемент опубликован или нет (также Amazon говорит что хорошо разработанные приложения обычно имеют только одну таблицу).

Буду очень признателен за любые советы или предложения.

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Пара вещей:

  1. 25 000 - это не так много элементов в одном разделе. Но если ваш стол увеличится до десятков миллионов предметов, у вас возникнет проблема

  2. Не бойтесь сканирований - если вы ожидаете получить половину элементов на вашем столе, сканирование действительно очень эффективно!

  3. Если вы знаете, что будет опубликована (или неопубликована) только небольшая часть товара, то разреженный GSI будет очень эффективным - но если распределение будет примерно наполовину, тогда это не будет много смысла: просто отсканируйте таблицу!

0 голосов
/ 04 сентября 2018

DynamoDB не должен использоваться для массовых обновлений или массовых чтений. Он предназначен для транзакционного чтения или записи. Если вы имеете дело с массовыми обновлениями, RDS будет хорошим выбором для транзакционных данных.

Если вы хотите использовать только ограниченный набор данных, вы можете прочитать набор в определенный момент времени, но запрашиваемый вами номер не будет учитываться постоянно. Все, что доступно в это время, будет доставлено вам вместе с маркером, известным как lastEvaluatedKey.

Кроме того, вы также можете использовать ключ публикации в качестве ключа диапазона, может помочь при чтении по разделу, однако чтение объемных операций чтения / записи в DynamoDB займет много времени и не будет хорошей архитектурой.

Надеюсь, это поможет.

...