DynamoDB Запрашивает различные значения атрибутов

#amazon-web-services #amazon-dynamodb #dynamodb-queries #aws-dynamodb

#amazon-веб-сервисы #amazon-dynamodb #dynamodb-запросы #aws-dynamodb

Вопрос:

Я пытаюсь запросить DynamoDB и получить результат, аналогичный select distinct(address) from ... SQL.

Я знаю, что DynamoDB-это база данных, ориентированная на документы, и, возможно, мне нужно изменить структуру данных.

Я пытаюсь избежать получения всех данных сначала и последующей фильтрации.

Мои данные выглядят так:

Атрибут Тип данных
ID Строка
Var1 Карта
ВарН Карта
Адрес Строка

Поэтому я хочу получить отдельные адреса во всей таблице.

Как это лучше всего сделать?

Комментарии:

1. Если вам будет очень нужен этот запрос, возможно, вам захочется ввести дополнительный адрес таблицы, содержащий (уникальный) Адрес, идентификатор и количество. Настройте потоки DynamoDB в исходной таблице и обновите таблицу количества адресов, используя лямбда-функцию для атомарной вставки, увеличения/уменьшения количества, удаления при вставке/изменении/удалении элементов в исходной таблице. Затем простое сканирование этой таблицы даст вам, как минимум, уникальные адреса.

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

Ответ №1:

К сожалению, нет. Вам понадобится Scan вся таблица (вы можете использовать параметры ProjectionExpression или AttributesToGet , чтобы запросить только атрибут «Адрес», но в любом случае вы заплатите за сканирование всего содержимого таблицы).

Если вам нужно часто выполнять это сканирование, вы можете добавить вторичный индекс, который отображает только ключи и атрибут «Адрес», чтобы упростить сканирование. Но, к сожалению, с помощью которого ГСИ ключ раздела-это «адрес» не даст вам возможность исключить повторы: каждый раздел содержит список повторяющихся элементов, и, к сожалению, нет никакого способа, чтобы просто перечисление разных раздела ключи в индексе — Scan ную индекс даст вам тот же раздел клавишу несколько раз, поскольку многие предметы в этом разделе.

Комментарии:

1. Я боялся это подтвердить. Вы подали мне идею добавить второй индекс, чтобы снизить затраты. Другой способ, я думаю, это создать новую таблицу, но затраты на разработку вторичного процесса для вставки / вставки и обслуживания вторичной таблицы этого не стоят. Спасибо за вашу помощь

2. Если вы хотите сохранить вторую таблицу, просто не забудьте обработать случай удаления элемента — вы не можете просто удалить адрес из второй таблицы, потому что он может быть использован другим элементом. Одна вещь, которую вы можете сделать, чтобы решить эту проблему, — это сохранить атрибут «количество ссылок» для каждого адреса во второй таблице, уменьшить его вместо удаления адреса и при сканировании второй таблицы отфильтровать адрес с количеством ссылок 0. Все это легко сделать в DynamoDB, но на самом деле не безопасно для параллелизма, потому что задействованы две разные таблицы: — (