Операция поиска ключей нескольких разделов в DynamoDB

Есть ли какая-то операция Scan API или Query API, которая позволяет выполнять поиск в таблице с составным ключом (pk/sk), но изменяется только в pk для оптимизации операции сканирования таблицы?

Позвольте мне представить прецедент:

Предположим, у меня есть ключ раздела, определяемый идентификатором проекта, и в каждом проекте у меня есть огромное количество записей (sk)

Теперь мне нужно решить запрос «вернуть все проекты». Поэтому у меня нет ключа раздела, и мне нужно выполнить сканирование.

Я знаю, что мог бы создать GSI, решающий эту проблему, но давайте предположим, что это не так.

Есть ли способ выполнить сканирование, которое «перескакивает» между каждым pk, игнорируя элементы sk?

Другими словами, я соберу информацию о первой записи каждого ключа раздела.

Это действительно звучит так, как будто у вас должно быть две таблицы: таблица для «проектов» и таблица для «записей» или что-то еще, что они семантически представляют.

Richard Dunn 10.01.2023 17:48

Спасибо @RichardDunn, я могу решить проблему с новой таблицей или GSI. Но вопрос был направлен на то, чтобы узнать, есть ли функциональность, позволяющая выполнять такое «оптимизированное» сканирование в той же таблице, чтобы я мог избежать создания индекса или другой таблицы.

Enrique Castro 10.01.2023 18:23

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

Richard Dunn 10.01.2023 22:41
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие...
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
О тренинге HTML JavaScript :HTML (язык гипертекстовой разметки) и CSS (каскадные таблицы стилей) - две основные технологии для создания веб-страниц....
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
Запуск PHP на IIS без использования программы установки веб-платформы
Запуск PHP на IIS без использования программы установки веб-платформы
Установщик веб-платформы, предлагаемый компанией Microsoft, перестанет работать 31 декабря 2022 года. Его закрытие привело к тому, что мы не можем...
Оптимизация React Context шаг за шагом в 4 примерах
Оптимизация React Context шаг за шагом в 4 примерах
При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после...
0
3
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как вы уже знаете, DynamoDB — это база данных NoSQL. Он оптимизирован для ПРОСМОТРА, и методы, которые вы использовали в базах данных SQL или других (небольших) базах данных, не всегда доступны в DynamoDB.

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

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

Этого ответа я и ожидал, большое спасибо, @Guy!

Enrique Castro 12.01.2023 00:19

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