Как я могу определить эффективный запрос диапазона на основе составного ключа сортировки DynamoDB?

С помощью составных ключей сортировки можно определить иерархические («один ко многим») отношения в данных, которые можно запрашивать на любом уровне иерархии.

Например, в таблице с перечислением географических местоположений ключ сортировки может быть структурирован следующим образом:

[country]#[city]#[founded_date]#[population]

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

Как я могу составить запрос, например чтобы получить все предметы, в которых название города начинается с "новый", был основан до 14.03.1923 и имеет население более 100 000 человек?


person niklr    schedule 14.05.2020    source источник


Ответы (1)


Приведенный вами пример на 100% касается иерархических данных. Вы ввели в него данные, которые не являются иерархическими, что полностью нарушает этот шаблон. В этом примере вы не могли найти города, которые начинаются с нуля, не зная предварительно страну, регион, штат и округ. Модель иерархии предполагает, что вы всегда выполняете поиск в известной части иерархии и хотите получить все, что ниже нее. Когда они говорят все, что между ними, они имеют в виду, что вы можете запрашивать на любом из этих уровней, а не о том, что вы можете запрашивать любой из этих элементов. Например, вы можете запросить каждое местоположение в штате Нью-Йорк, указав страну, регион и штат. Вы можете найти все в Нью-Йорке, указав страну, регион, штат, округ и город.

[country]#[region]#[state]#[county]#[city]#[neighborhood]

Чтобы делать то, что вы хотите, вам необходимо поддерживать несколько совершенно разных шаблонов доступа. Вам, вероятно, понадобится некоторый набор GSI, чтобы учесть различные шаблоны доступа, которые у вас есть, и, вероятно, потребуется выполнить некоторую фильтрацию помимо того, что вы можете сохранить в ключах. Помните, что NoSQL - это все о шаблонах доступа. Вам следует потратить некоторое время на выяснение того, что это такое, и как только вы это сделаете, вы сможете выяснить, как хранить свои данные, включая любые индексы, необходимые для поддержки способов, которыми вам нужен доступ к вашим данным.

person Jason Wadsworth    schedule 08.04.2021