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

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

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

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

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

Любые советы или предложения будут высоко оценены.

2 ответа

Пара вещей:

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

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

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

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

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

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

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

Другие вопросы по тегам