У меня есть разделKey, который состоит из двух строк, например. идентификатор пользователя: UserName. Например, 1234: John, 4567: Mark и т. Д. Я хочу запросить все записи, которые соответствуют подстроке, определенной UserName, например. Найдите все записи, содержащие «Марк» в разделе раздела. Как это сделать с использованием API-интерфейсов DynamoDb в Java?Как запросить ключи раздела, содержащие определенную подстроку в dynamoDb?
ответ
Надеюсь, это не то, что вам нужно делать часто.
DynamoDB не поддерживает запрос частичным хэш-ключом. Вам нужно будет использовать сканирование таблицы для повторения всех элементов таблицы и сравнить их для совпадений.
Это очень неэффективно, и если вы обнаружите, что в зависимости от этого типа поведения, вам нужно вернуться к выбору хэш-ключа и всех вариантов дизайна.
Для полноты код, который вы ищете, по следующим направлениям, если вы используете API документа:
// dynamo returns results in chunks - you'll need this to get the next one
Map<String, AttributeValue> lastKeyEvaluated = null;
do {
ScanRequest scanRequest = new ScanRequest()
.withTableName("YourTableNameHere")
.withExclusiveStartKey(lastKeyEvaluated);
ScanResult result = client.scan(scanRequest);
for (Map<String, AttributeValue> item : result.getItems()){
// for each item in the result set, examine the partition key
// to determine if it's a match
string key = item.get("YourPartitionKeyAttributeNameHere").getS();
if (key.startsWith("Mark"))
System.out.println("Found an item that matches *:Mark:\n" + item);
}
lastKeyEvaluated = result.getLastEvaluatedKey();
} while (lastKeyEvaluated != null);
Но прежде чем реализовать что-то подобное в вашем приложении рассмотреть вариант другую стратегию ключа раздела или создание таблицы secondary index для вашей таблицы или и того и другого - если вам нужно часто задавать этот тип запроса!
В качестве побочного примечания, мне любопытно, какую выгоду вы получите, включая идентификатор пользователя и имя пользователя в разделе раздела? Идентификатор пользователя, по-видимому, был бы уникальным для вас, поэтому почему имя пользователя?
Вы не можете сделать это, как описано выше экономичным способом. Вам понадобится scan
стол, что дорого и требует много времени.
Повторите выбор ключа, чтобы всегда выполнялись запросы с полными значениями ключей вместо подстрок.
Возможно, вы захотите использовать ключ диапазона - при включении ключа диапазона запросы могут эффективно выполняться либо с помощью хеш-ключа (возвращающего потенциально несколько значений), либо комбинации клавиши хеша/диапазона (которая должна быть уникальный).
В этом примере, если вы всегда запрашивая на любом USERID: имя пользователя или имя пользователя (но не USERID сам по себе), а затем, используя имя пользователя в качестве хеш-ключа и USERID в качестве ключевой диапазон является простым и эффективным решением.
Просто будьте осторожны с клавишами диапазона, потому что это открывает возможность неравномерного распределения ключей - т.е. несколько хеш-ключей с большим количеством клавиш диапазона, скорее всего, вызовут проблемы (см. http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html#GuidelinesForTables.Partitions.Scaling и http: // docs.aws.amazon.com/amazondynamodb/latest/developerguide/BestPractices.html) –
- 1. Удалить строки, содержащие определенную подстроку в Golang
- 2. Выберите файлы, содержащие определенную подстроку в MSBuild
- 3. XSLT Выберите все узлы, содержащие определенную подстроку
- 4. Lua: Как получить записи строк, содержащие определенную подстроку?
- 5. Оптимизация ключа раздела в DynamoDB
- 6. Как вырезать определенную подстроку?
- 7. Laravel - удалить все ключи кеша/redis, содержащие определенную строку
- 8. Запросить ключи
- 9. в R как фильтровать строки, содержащие подстроку?
- 10. Regex выделить определенную подстроку
- 11. XML возвращает все имена узлов, содержащие подстроку
- 12. Matching подстроку, которая не содержит определенную подстроку
- 13. Как запросить ключ диапазона программно в DynamoDB
- 14. Как запросить значение StringSet в DynamoDB (iOS)?
- 15. Как запросить несколько элементов в DynamoDB (iOS)?
- 16. Как запросить AWS DynamoDB в python?
- 17. Как удалить определенную подстроку в C#
- 18. Как извлечь определенную подстроку в Java
- 19. Как получить все файлы, содержащие подстроку
- 20. DynamoDB "композитные" ключи структуры индекса
- 21. Поиск таблиц/столбцов, содержащих определенную подстроку
- 22. Удалить определенную подстроку из строки
- 23. Как запросить amazon dynamodb с помощью pentaho
- 24. Как запросить значение greates (sortkey/range) dynamodb?
- 25. DynamoDB как запросить только по диапазону?
- 26. как запросить dynamodb с LSI и mapper
- 27. Excel VBA: как найти определенную подстроку
- 28. Как удалить определенную подстроку из строки?
- 29. dynamodb как запросить ключ сортировки только?
- 30. Удалить строки, содержащие определенную строку
Удивительное количество деталей Майк! Просто нужно добавить некоторую информацию о возможностях использования ключей диапазона, чтобы решить эту проблему, и мой ответ становится устаревшим ... – Krease
Спасибо @Chris. Я более или менее сознательно пропустил детали ключа диапазона частично, потому что в этом случае он не (идентификатор пользователя и пары имен пользователей должны быть уникальными), а отчасти потому, что я считаю, что использование ключей дальности с динамомашиной легко пропустить и причина многих головных болей масштабирования –