Я не могу понять, что первичный ключ Range здесь -
и как это работает?
Что они подразумевают под «неупорядоченным индексом хеш-функции в атрибуте хэш-функции и индексом отсортированного диапазона в атрибуте диапазона»?
Я не могу понять, что первичный ключ Range здесь -
и как это работает?
Что они подразумевают под «неупорядоченным индексом хеш-функции в атрибуте хэш-функции и индексом отсортированного диапазона в атрибуте диапазона»?
« Первичный ключ хеширования и диапазона » означает, что одна строка в DynamoDB имеет уникальный первичный ключ, состоящий из хеша и ключа диапазона . Например, с хэш-ключом X и ключом диапазона Y , ваш первичный ключ - это XY . Вы также можете иметь несколько ключей диапазона для одной и той же хэш-клавиши, но комбинация должна быть уникальной, как XZ и XA . Давайте использовать их примеры для каждого типа таблицы:
Первичный ключ хеша - Первичный ключ состоит из одного атрибута, атрибута хеша. Например, таблица ProductCatalog может иметь ProductID в качестве первичного ключа. DynamoDB строит неупорядоченный хеш-индекс для этого атрибута первичного ключа.
Это означает, что каждая строка отключена от этого значения. Каждая строка в DynamoDB будет иметь обязательное уникальное значение для этого атрибута . Неупорядоченный хэш-индекс означает то, что говорит - данные не упорядочены, и вам не дают никаких гарантий того, как эти данные хранятся. Вы не сможете выполнять запросы по неупорядоченному индексу, например, « Получить мне все строки, у которых ProductID больше X» . Вы пишете и выбираете элементы на основе хэш-ключа. Например, возьмимня строка из этой таблицы , которая имеет ProductID X . Вы делаете запрос по неупорядоченному индексу, так что вы получаете против него, в основном, поиск по значению ключа, очень быстрый и с очень низкой пропускной способностью.
Первичный ключ хэша и диапазона - первичный ключ состоит из двух атрибутов. Первый атрибут - это атрибут hash, а второй - атрибут range. Например, таблица темы форума может иметь ForumName и Subject в качестве первичного ключа, где ForumName - это атрибут хеша, а Subject - атрибут диапазона. DynamoDB строит неупорядоченный хеш-индекс по атрибуту хеш-функции и отсортированный индекс диапазона по атрибуту диапазона.
Это означает, что первичный ключ каждой строки представляет собой комбинацию ключа хеша и диапазона . Вы можете делать прямые попадания в отдельные строки, если у вас есть и хеш, и ключ диапазона, или вы можете сделать запрос по отсортированному индексу диапазона . Например, получить Получить все строки из таблицы с хэш-ключом X, у которых ключи диапазона больше Y , или другие запросы, влияющие на это. Они имеют лучшую производительность и меньшее использование емкости по сравнению с сканированиями и запросами к полям, которые не проиндексированы. Из их документации :
Результаты запроса всегда сортируются по ключу диапазона. Если тип данных ключа диапазона - Number, результаты возвращаются в числовом порядке; в противном случае результаты возвращаются в порядке значений кодов символов ASCII. По умолчанию порядок сортировки возрастает. Чтобы изменить порядок, установите для параметра ScanIndexForward значение false
Я, вероятно, пропустил некоторые вещи, когда набрал это, и я только поцарапал поверхность. Есть много больше аспектов , чтобы принять во внимание при работе с таблицами DynamoDB (пропускной способностью , консистенцией, емкостью, другими показателями, распределением ключей и т.п.). Вы должны взглянуть на примеры таблиц и страницу данных для примеров.
Поскольку все перемешивается, давайте посмотрим на его функцию и код, чтобы смоделировать, что это означает
Только способ получить строку осуществляется с помощью первичного ключа
getRow(pk: PrimaryKey): Row
Структура данных первичного ключа может быть такой:
Однако вы можете решить, что ваш первичный ключ - это ключ раздела + ключ сортировки в этом случае:
В любом случае вы получаете одну строку по первичному ключу, единственный вопрос - если вы определили, что первичный ключ должен быть только ключом раздела или ключом раздела + ключом сортировки
Строительные блоки:
Думайте об Предмете как о строке, а об атрибуте КВ - как о клетках в этом ряду.
Вы можете сделать (2), только если вы решили, что ваш ПК состоит из (HashKey, SortKey).
Более наглядно, как это сложно, как я это вижу:
Итак, что происходит выше. Обратите внимание на следующие наблюдения. Как мы уже говорили, наши данные принадлежат (Table, Item, KVAttribute). Тогда у каждого предмета есть первичный ключ. Теперь то, как вы составляете этот первичный ключ, имеет смысл для доступа к данным.
Если вы решите, что ваш PrimaryKey - это просто хеш-ключ, тогда прекрасно, что вы можете получить из него один элемент. Однако если вы решите, что вашим первичным ключом является hashKey + SortKey, то вы также можете выполнить запрос диапазона по первичному ключу, потому что вы получите свои элементы по (HashKey + SomeRangeFunction (на ключе диапазона)). Таким образом, вы можете получить несколько элементов с помощью запроса первичного ключа.
Примечание: я не ссылался на вторичные индексы.
источник
Хорошо объясненный ответ уже дан @mkobit, но я добавлю большую картину ключа диапазона и ключа хеша.
Одним словом
range + hash key = composite primary key
CoreComponents ДинамодбТаким образом, оба имеют разные цели и вместе помогают выполнять сложные запросы. В приведенном выше примере
hashkey1 can have multiple n-range.
Другим примером диапазона и хэш-ключа является игра, пользователь A(hashkey)
может играть в Ngame(range)
https://www.slideshare.net/InfoQ/amazon-dynamodb-design-patterns-best-practices https://www.slideshare.net/AmazonWebServices/awsome-day-2016-module-4-databases-amazon-dynamodb -and-amazon-rds https://ceyhunozgun.blogspot.com/2017/04/implementing-object-persistence-with-dynamodb.html
источник
Music
таблицей один исполнитель не может создать две песни с одинаковым названием, но это удивительно - в видеоиграх у нас есть Doom 1993 года и Doom 2016 года en.wikipedia.org/wiki/Doom_(franchise) с одним и тем же «исполнителем» ( разработчик):id Software
.@vnr вы можете получить все ключи сортировки, связанные с ключом раздела, просто используя запрос с ключом разделения. Нет необходимости в сканировании. Дело в том, что ключ раздела является обязательным в запросе. Ключ сортировки используется только для получения диапазона данных
источник