Запрос DynamoDB с операторами сравнения - PullRequest
14 голосов
/ 23 января 2012

Вопрос Amazon AWS DynamoDB.

Есть ли примеры использования RangeKeyCondition и ComparisonOperators, таких как CONTAINS, IN, BETWEEN. Я пытаюсь получить данные на основе составного RangeKey (объединены и разделены). Например, дата + автор + ключевые слова для книги таблицы. Предположим, что HashValue в данном случае является «книгой» (это может быть книга, DVD, видео, ссылка и т. Д.). Я хотел бы выбрать все книги, которые содержат ключевое слово "magic", или все книги автора "John Doe". Пример записи / элемента будет выглядеть так:

Hash ------ Range --------------------------------------- -------------------------- attribute1 ... attributetex

книга ------ 2012-1-20 ~ Джон Доу ~ приключение ~ магия ~ путешествия ---------------- описание ... кое-что

При попытке использовать условный оператор IN или CONTAINS я получаю следующую ошибку: Объект (CFSimpleXML) 20 public '__type' => string 'com.amazon.coral.validate # ValidationException' (length = 45) public 'message' => string 'Попытка условного ограничения не является индексируемой операцией'

Не удалось найти ни одного примера с использованием этих операторов сравнения. Любая помощь будет принята с благодарностью.

Спасибо.

1 Ответ

36 голосов
/ 27 января 2012

Важно понимать разницу между двумя API поиска Запрос и сканирование в Amazon DynamoDB :

  • Запрос

    Операция запроса ищет только значения атрибутов первичного ключа, а поддерживает подмножество операторов сравнения для значений атрибута ключа , чтобы Уточните процесс поиска. Запрос возвращает все данные элемента для соответствующие первичные ключи (все атрибуты каждого элемента) до 1 МБ данные на операцию запроса. [...]

    [..] Для получения информации о каждом операторе сравнения, доступном для запроса операции, см. запись API для Query .

    [акцент мой]

  • Сканирование

    Операция сканирования сканирует всю таблицу. Вы можете указать фильтры для применить к результатам, чтобы уточнить значения, возвращенные вам, после полное сканирование. Amazon DynamoDB устанавливает ограничение сканирования в 1 МБ ( ограничение применяется до фильтрации результатов). [...]

    [...] Для получения информации о каждом операторе сравнения, доступном для сканирования операции, см. запись API для сканирования .

Теперь поддерживаемое подмножество для RangeKeyCondition: ComparisonOperator Query API исключает CONTAINS и IN, которые оба доступны в Scan API ; в обоих API доступен только оператор сравнения BETWEEN.

Это ограничение, скорее всего, проистекает из соображений производительности, т. Е. Поддержка CONTAINS, вероятно, приведет к поражению цели DynamoDB по предсказуемой производительности / пропускной способности.

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

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...