2

Документация Amazon DynamoDB, как представляется, намеренно связана с тем, как раздел выбирается для строки. Вот discussion о Partition Key (курсив мой):Что такое «внутренняя хэш-функция» для UUID в DynamoDB?

Partition ключ - простой первичный ключ, состоящий из одного атрибута, известного как раздела ключа.

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

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

Таблица People, приведенная в Tables, Items, and Attributes, является примером таблицы с простым первичным ключом (PersonID). Вы можете сразу получить доступ к любому элементу в таблице People, указав значение PersonId для этого элемента.

Таким образом, приведенный пример имеет PersonID как число, которое может быть грандиозным или унылым для хэширования - в зависимости от этой внутренней хэш-функции.

В моем проекте мы используем случайный UUID v4 для нашего первичного ключа, и в настоящее время мы сохраняем этот UUID в форме String/S (с включенными тире). Мне приходит в голову, что, подобно целому числу, эта строка UUID может хеш красиво или мрачно в зависимости от этой внутренней хэш-функции.

Сохраняющиеся UUID как строки удобны для нас (хотя и расточительно пространственные), потому что мы можем просматривать/запрашивать UUID в консоли Dynamo в том же формате v4, что и в журналах нашего приложения. НО, если сохранится наша UUIDs в форме String/S, а не в форме Binary/B, это приведет к ужасному наложению наших строк на один или два раздела, потому что внутренняя хеш-функция наивна для преобразования нашей строки UUID в байты, тогда удобство быть проклятым, а бинарная/B форма лучше всего подходит для UUID.

Итак, я хотел бы узнать больше о внутренней хеш-функции (желательно от самих разработчиков Динамо). Молитесь, дайте нам подробности относительно уровня умений в этой внутренней хэш-функции. Как он ведет себя со строкой/S, Number/N и двоичными/B типами?

Означает ли внутренняя функция хеш-кода, что мы передаем строку форматированного UUID v4 и автоматически хэш в двоичной форме этого UUID? Или это лексикографическое хеширование?

Если ключевой алгоритм хеширования String/S по умолчанию наивен, есть ли какой-либо программный способ, который я могу использовать, чтобы намекнуть на Dynamo, что мой String-ключ является UUID и имеет ли он хэш в двоичной форме как таковой? Я использую DynamoSDK для Java с DynamoDBMapper для доступа к моим таблицам, и я могу посыпать дополнительные аннотации на мои сущности везде, где вы направляете. Я также контролирую собственное определение таблицы с помощью конфигураций схемы DynamoDB json и могу там вносить изменения там, где это необходимо.

ответ

2

Я не являюсь разработчиком команды DynamoDB, но я постараюсь ответить на все, что могу.

  • Там нет никакого способа намека DynamoDB, как это должно хэш ключа раздела внутри. Кроме того, для DynamoDBMapper нет такой аннотации.
  • Поскольку DynamoDB не раскрывает внутренности своей схемы хэширования, вы не должны использовать такие предположения в своей системе. Это связано с тем, что DynamoDB может свободно менять прежнего в любое время, какое бы оно ни хотелось, каким бы редким оно ни было.
  • DynamoDB фактически хэши дважды внутри, из-за которой я не думаю, что вы должны беспокоиться, что много:
    • Это первая хэши, чтобы избежать последовательных ключей падения вместе. Зайдите на форум this.
    • Он хэширует вышеупомянутое, чтобы решить, к какой секции должен идти запись.
+0

Спасибо, это дает мне подсказки. Ясно, что внутренняя хеш-функция Number не наивна, поэтому строка может быть не такой. Как вы сказали, делать предположения были бы опасны, потому что они преднамеренно оставили вещи неуказанными. Тем не менее, есть что-то захватывающее в плане опасной жизни! Мне было бы приятно, что в феврале 2017 года AWS делает некоторое умное хэширование со строками (особенно довольно случайными шестнадцатеричными), и мне не нужно беспокоиться о сглаживании моих ключей к определенным разделам. – DWoldrich

+1

Да, как я уже сказал, вам не нужно явно указывать свои ключи на определенные разделы. –

 Смежные вопросы

  • Нет связанных вопросов^_^