Я столкнулся со следующей проблемой:
Мне нужно создать таблицу со многими атрибутами: статус, user_id, атрибут_1, атрибут_2... атрибут_n.
Мне нужно выполнить большое количество запросов, фильтруя только по статусу, но этот атрибут имеет низкую мощность (только два значения: включено и отключено), но для выполнения этих запросов мне нужно использовать satus в качестве ключа раздела.
Второй вариант — использовать user_id, но я не смог выполнять запросы по статусу без построения вторичного индекса.
Как лучше всего решить эту проблему? каковы последствия создания вторичного индекса с низкой кардинальностью?
Заранее спасибо.
Варианты, которые я рассматривал:
Создание вторичного индекса
Использование сканирования (отменено)
Использование ключа раздела с низкой мощностью
Почти ничего, эта таблица предназначена только для чтения
Низкая мощность — проблема, когда вам нужно масштабироваться высоко. Если вам не нужно масштабироваться высоко, не проблема. :)
Вам необходимо спроектировать таблицу на основе планируемого вами шаблона доступа, а не на структуре данных. DynamoDB может легко хранить сложные атрибуты данных.
Если вам необходимо получить доступ ко всем записям конкретного пользователя в определенном статусе, вам следует определить ключи и вторичные индексы для удовлетворения этого требования. Наличие поля метки времени в ваших данных и ключах доступа всегда полезно, поскольку позволяет фильтровать или сортировать данные по времени.
Таким образом, согласно вашему описанию, у вас должен быть идентификатор пользователя и метка времени в качестве ключей к таблице, а также вторичный индекс статуса.
Поскольку у вас небольшая пропускная способность, в качестве ключа раздела вы можете использовать что угодно.
Высокая мощность требуется только в том случае, если вам необходимо масштабирование. DynamoDB заранее определяет, что масштабирование начинается с 1000 WCU и 3000 RCU в секунду. Если вы никогда не выйдете за пределы этих значений, у вас может быть один ключ раздела.
Как вы упомянули, если у вас есть 2 ключа раздела, DynamoDB может поддерживать 2000 WCU и 6000 RCU.
Сколько WCU вы будете потреблять в пик?