2013-05-23 2 views
2

Я планирую иметь таблицу User с UserName как хэш-ключ и атрибут LastLoginDate (среди прочих).Запрос DynamoDB с уникальными атрибутами хэша?

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

Как бы это сделать с помощью DynamoDB?

Я изучал местные вторичные индексы и думал о создании вторичного индекса LastLoginDate. Но, как я понимаю, documentation, вторичные индексы только помогают получить результаты заказа для одного и того же хеш-ключа, и в моем случае каждый пользователь будет иметь уникальный номер UserName. Не делает ли такой дополнительный индекс бессмысленным?

Заранее благодарен!

ответ

3

Вы правы, вы всегда должны запрашивать HashKey, если не выполнить полное сканирование таблицы.

Выполнение полного сканирования, вы можете посмотреть каждую запись в своей таблице и сравнить их LastLoginDate. Это может быстро стать незаменимым в зависимости от того, сколько у вас пользователей.

+0

Я этого боялся. Гектометр Меня интересует только «Все пользователи, которые не вошли в систему в течение последнего месяца» для целей администрирования, и поэтому эта информация не нужна слишком часто (скажем, один раз в день/неделю). В этом случае, я думаю, было бы хорошо пойти с полным сканированием таблицы? – Felix

+0

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

+0

О, дорогая, часы были бы плохими. В идеале я хотел бы иметь возможность поддерживать очень большое количество пользователей, скажем, 1 миллион. В этом случае вполне возможно, что сканирование может занять несколько часов? Каждый пользователь может сказать 10 атрибутов. – Felix

-1

. Мой подход к этой проблеме заключается в создании хеш-ключа, например, «userType», который может быть «regularUser», «admin» и т. Д. UserName может быть ключом диапазона, а LastLoginDate может быть индексом.

Затем вы можете запросить таблицу для конкретного пользователя, предоставив хеш-ключ 'regularUser' и клавишу диапазона 'some user name, например'. И когда вы хотите, чтобы все пользователи, зависящие от своего последнего времени входа, вместо ключа диапазона «UserName» использовали индекс «LastLoginDate».

+0

«При хранении данных Amazon DynamoDB делит таблицу на несколько разделов и распределяет данные на основе элемента хэш-ключа первичного ключа. При распределении ресурсов емкости Amazon DynamoDB предполагает относительно произвольный шаблон доступа для всех первичных ключей». Наличие трех хэш-ключей может привести к повреждению вашей пропускной способности. См .: http://aws.amazon.com/dynamodb/faqs/ – jamie

2

Вы можете создать GSI на LastLoginDate и применить свою логику, выполнив запрос Query to GSI. Это может помочь получить результат быстрее, вместо того, чтобы сканировать FASH HASH-ключ и проверять LastLoginDate и применять логику.

Смежные вопросы