2017-02-10 1 views
0

У меня есть таблица, в которой используется ключ хеша и ключ сортировки (диапазона). Мой ключ диапазона - это uuid. У меня есть случай, когда у меня есть произвольный набор ключей диапазона, который я хочу запросить в базе данных для использования DynamoDBMapper. Они никоим образом не являются последовательными, и, к сожалению, для моей цели нет способа, чтобы они могли быть последовательными, поэтому я не могу запросить диапазон ключей (т. Е. Ключ находится между a и b). Есть ли способ получить условие запроса, которое ищет ключ диапазона, который находится в наборе потенциальных значений? По существу, условие sqERE WHERE подобно: rangeKey IN (val1, val2, ...);DynamoDB: запрос для ключа диапазона в наборе непересекающихся клавиш диапазона

В соответствии с документами для DynamoDBQueryExpression это не представляется возможным с помощью setKeyConditionExpression или setRangeKeyConditions. Есть ли эффективный способ сделать это? Или моя лучшая ставка, повторяющаяся через мой набор потенциальных значений и использование метода загрузки для индивидуального извлечения их из базы данных? Операция

+3

Вы можете поделиться немного подробнее о своей модели данных? кажется немного странным использовать uuids в качестве ключей диапазона, потому что у них нет естественного порядка. – hellomichibye

+0

Я второй комментарий hellomichibye. Похоже, ваша модель данных нуждается в некоторой работе. Использование UUID в качестве ключа диапазона не имеет смысла. –

+0

Я согласен, что это не идеальный вариант, но это лучшее решение, с которым мы столкнулись. У нас есть разделы базы данных для разных клиентов, к которым обращаются через хэш-ключ. Внутри раздела все документы очень независимы друг от друга, поэтому любая сортировка или упорядочение будут произвольными. Этот запрос необходим, потому что у нас есть ссылочная таблица, которая связывает несколько документов с другим объектом. Однако ссылки на этот объект часто меняются, поэтому снова любая сортировка или упорядочение будут очень произвольными. –

ответ

1

IN не поддерживается в Query согласно документации here:

Условие ключ сортировки необходимо использовать один из следующих сравнения операторов:

  • а = Ь - истинно, если атрибут a равен значению b
  • a < b - истина, если a меньше b
  • < = б - истина, если меньше или равно б
  • а> Ь - истина, если больше, чем б
  • а> = б - истина, если больше или равно б
  • a МЕЖДУ b И c - истинно, если a больше или равно b и меньше или равно c.

Следующая функция также поддерживается:

BEGINS_WITH (а, зиЬзЬг) - истинно, если значение атрибута а начинается с определенной подстроки.

Кроме того, вам всегда нужна точная клавиша хэша, чтобы сделать Query. Если это подходит для вашего случая использования, вы должны Query DynamoDB и применить фильтр IN на уровне приложения.

Если у вас нет точной хеш-клавиши, выполните Scan, у которого есть IN операция для фильтрации. Документация here.

+0

Вот что я подумал.У меня всегда есть хеш-ключ, и текущая реализация - это именно то, что вы сказали выше, я просто надеялся, что есть более эффективный собственный способ сделать это. –