Я ищу запрос на базе Dynamo DB без HashKey. Я пробовал использовать сканирование, но это дорого, поэтому мы искали другие альтернативы.Запрос в Dynamo DB без hashkey или сканирование
ответ
Начну с того, что запрос таблицы DynamoDB без знания хэш-ключа не может быть выполнен. И это имеет смысл.
Теперь, нужен ли хэш-ключ, который вы хотите использовать, - это первичный ключ таблицы или нет, зависит от вас.
Предположим, например, что у вас есть следующая таблица:
╔══════════════════════╦════════════════════════╦════════════════╗
║ course_id (Hash Key) ║ course_name ║ teacher ║
╠══════════════════════╬════════════════════════╬════════════════╣
║ 324234 ║ Node.js for Dummies ║ Ryan Dahl ║
║ 213323 ║ How to train your cat ║ Jackson Galaxy ║
║ 324090 ║ Cat Logic ║ Jackson Galaxy ║
║ 763298 ║ Diving into .NET ║ Eric Lippert ║
╚══════════════════════╩════════════════════════╩════════════════╝
ключ первичный ключ и хэш стола является course_id
, который прекрасно. Предоставление уникальных хэш-ключей позволяет разделить таблицу на несколько разделов.
Но, если мы хотим получить Все курсы, которые преподаёт Jackson Galaxy?
Мы не знаем course_id
этих курсов, это то, что мы хотим получить. Таким образом, мы оказываемся без знания значений хэш-элементов элементов.
Здесь GSI Вступить в игру. Глобальные вторичные индексы позволяют определить другой хеш-ключ для вашей таблицы. Обратите внимание, что он не изменит основной хеш-ключ - course_id
все равно будет хэш-ключ таблицы.
GSI предоставляет дополнительный хеш-ключ, позволяющий выполнять более сложные запросы.
Допустим, мы добавим GSI по имени teacher_index
, и мы говорим, что teacher
будет наш хэш-ключ, и course_id
будет наш ключевой диапазон (Нам нужно указать ключ диапазона, потому что teacher
отдельно в качестве хэш-ключа будет генерировать дубликат записей).
Теперь мы можем запросить наш teacher_index
и передать в Jackson Galaxy
как значение ключа хэша. Результатом будет 213323 - How to train your cat
и 324090 - Cat Logic
.
Спасибо за очень простой и понятный ответ. –
Хороший ответ. Но разве это не подчеркивает ограничение dynamodb? В mongodb нет необходимости указывать явные индексы для того, что вы хотите запросить. Я просто пытаюсь понять различия здесь. – Phil
Отличный ответ, помогите мне понять концепцию GSI, но предположим, что я хочу создать функцию поиска для учителей, как я могу пользователь 'contains', если учителем является hash_key? – agmezr
Я частично согласен с ответом, опубликованным Матиасом. Вы можете создать глобальный вторичный индекс в таблице (с хеш-ключом и опционный ключ диапазона).
Я не согласен с тем, что он говорит в своем ответе позже: «Нам нужно указать ключ диапазона, потому что только учитель как хэш-ключ будет генерировать повторяющиеся записи». Я не могу прокомментировать его ответ, потому что у меня недостаточно репутации. По какой-то причине я не могу отредактировать его ответ.
Из AWS docs:
Глобальные вторичные индексы не обеспечения уникальности
Следовательно, диапазон ключей для глобальных вторичных индексов (GSI в) являются необязательными и составной ключ для GSI не нужно однозначно идентифицировать любую запись.
- 1. нечувствительный к регистру запрос в dynamo DB
- 2. Pagination in dynamo db
- 3. dynamo Db содержит
- 4. Dynamo DB Concepts
- 5. amazon dynamo db model
- 6. Dynamo DB и Rails
- 7. Node.JS Dynamo DB Vogels Ошибка KeyCondition
- 8. Счетчик автоинкремента в Dynamo DB
- 9. Запрос с использованием только вторичных индексов в dynamo DB
- 10. Dynamo Db Spatial Search with GeoHashing
- 11. Что такое консистенция записи DB Dynamo DB?
- 12. Данные DB Dynamo для Redhisft
- 13. Gradle Spring-data-dynamo db
- 14. Dynamo DB + In put Item Запрос, как передать значение null?
- 15. ruby rails dynamo db tutorial
- 16. Dynamo Db JSONResponseError с boto под флягой
- 17. Couchbase vs Amazon Dynamo DB
- 18. Dynamo DB Local - Connection Refused
- 19. ИЛИ условие в выражении фильтра для dynamo db
- 20. Как структурировать данные в amazon dynamo db?
- 21. Как использовать в операторе в dynamo db
- 22. Дробная колонка в таблице Dynamo DB
- 23. Асинхронные запросы для записи в Dynamo db
- 24. Копирование неудачных записей в dynamo db
- 25. aws cli dynamo db (ValidationException) Ошибка
- 26. AWS Dynamo DB поддерживает встроенные документы или нет?
- 27. Миграция с Parse на AWS Dynamo DB
- 28. Cant update Dynamo Db table, получение ValidationException
- 29. Не найти обычный метод QueryRequest.withKeyConditions() (DB Dynamo)
- 30. Dynamo DB: глобальный вторичный индекс, разреженный индекс
Просьба предоставить некоторые данные образца и ваш желаемый результат. (См. [How to формат SQL-таблиц в переполнении стека post?] (Http://meta.stackexchange.com/q/96125) о том, как добавить некоторые.) Дополнительная схема информация, где ваши попытки не удались, также помогите нам помочь вам лучше. – Raju
Пробовал вот так: filter.put ("id", new Condition(). WithComparisonOperator (ComparisonOperator.EQ) .withAttributeValueList (новый AttributeValue(). WithS (id))); scanExpression.setScanFilter (фильтр); \t \t \t // TableNamess - это имя таблицы list = dynamoDBMapper.scan (TableNamess.class, scanExpression, dynamoDBOperations.getTableNameOverride (tableName)); – Mridul
Пожалуйста, обновите вопрос, нажав ссылку [edit] (http://stackoverflow.com/posts/35861013/edit), которая доступна чуть ниже вашего содержимого вопроса. Вопрос позволяет много возможностей форматирования, кроме комментариев. – Raju