Получение значений из DynamoDB - PullRequest
17 голосов
/ 06 февраля 2012

Я только начал изучать Amazon DynamoDB. Очевидно, что масштабируемость привлекательна, но я пытаюсь вывести себя из режима SQL и перейти в режим no-sql. Можно ли это сделать (со всеми преимуществами DynamodB для масштабируемости):

Имеет множество записей (скажем, 5 - 10 миллионов), проиндексированных каким-либо числом. Одним из полей в каждой записи будет дата создания. Существует ли эффективный способ для динамо-базы данных предоставить моему веб-приложению все записи, созданные между двумя датами?

Более простой вопрос - может ли динамо БД дать мне все записи, в которых поле соответствует определенному числу. То есть будет другое поле, которое является числом, для аргумента, скажем, между 0 и 10. Могу ли я попросить DynamodB дать мне все записи, которые имеют значение, например, 6

Нужны ли обоим этим запросам сканирование всего набора данных (что, как я полагаю, является проблемой, учитывая размер набора данных?)

большое спасибо

1 Ответ

20 голосов
/ 07 февраля 2012

Есть ли эффективный способ для динамо-базы данных дать моему веб-приложению все записи, созданные между двумя датами?

Да, пожалуйста, взгляните на концепцию Первичный ключ в Модель данных Amazon DynamoDB , в частности, Первичный ключ типа хэша и диапазона :

В этом случае первичный ключ состоит из двух атрибутов. Первый Атрибуты - это атрибут хеша, а второй - это диапазон приписывать. Amazon DynamoDB строит неупорядоченный хеш-индекс на хеш атрибут первичного ключа и отсортированный индекс диапазона в первичном диапазоне ключевой атрибут. [...]

Перечисленные примеры точно соответствуют вашему варианту использования, а именно таблица Reply (Id, ReplyDateTime, ...) обеспечивает первичный ключ типа Hash и Range с атрибутом hash Id и атрибут диапазона ReplyDateTime .

Вы будете использовать это через Query API, подробности см. В RangeKeyCondition и в Запросе таблиц в Amazon DynamoDB для соответствующих примеров.

может Динамо БД дать мне все записи, в которых поле соответствует определенному число. [...] Могу я попросить динамодба дать мне все записи, которые имеют значение, например, 6

Это также возможно, хотя и только с помощью Scan API (т.е. требуется действительно читать каждый элемент в таблице), подробности см. ScanFilter и Сканирование таблиц в Amazon DynamoDB для соответствующих примеров.

Нужны ли обоим этим запросам сканирование всего набора данных (который я Предположим, это проблема, учитывая размер набора данных?)

Как уже упоминалось, первый подход работает с Query , тогда как второй требует Scan и Как правило, операция запроса более эффективна, чем операция сканирования - это хороший совет для начала работы, хотя детали более сложны и зависят от вашего варианта использования, см. раздел Производительность сканирования и запросов в обзоре Запрос и сканирование в Amazon DynamoDB :

Для более быстрого времени отклика, спроектируйте свои таблицы так, чтобы они могли использовать API-интерфейсы Query, Get или BatchGetItem. Или создай свой приложение для использования операций сканирования таким образом, чтобы свести к минимуму влияние на скорости запроса вашего стола. Дополнительную информацию см. В Рекомендации по пропускной способности в Amazon DynamoDB .

.

Так что, как обычно, при применении решений NoSQL, вам может потребоваться настроить вашу архитектуру с учетом этих ограничений.

...