На прошлой неделе я наткнулся на DynamoDB. За последние несколько лет я был очарован тем, как индустрия перешла от реляционной к nosql, к newsql, а затем распространилась во всех направлениях, схлопнулась в mysql/postgres и т. д. Все это одновременно забавно и увлекательно. Вы можете назвать это смешной игрой.

По моему прошлому опыту, всякий раз, когда мы использовали магазин kv, за который платили много, масштабируемость приходит с проверкой, вы платите за потерю функций, вы получаете выгоду от высокой производительности, поэтому вам приходится идти на компромисс — Экономика 101.

Как бы то ни было, я начал читать о DynamoDB, управляемом хранилище KV, и заметил, что в его ключевой структуре и в его индексировании есть сложность и мощь. Мне потребовалось некоторое время, чтобы узнать, как работает ключи, и мне потребовалось некоторое время, чтобы понять, как работает индексация. Я до сих пор не уверен, получил я его или нет. В любом случае, я хочу поделиться с вами своим визуальным пониманием этого:

Есть 3 основных строительных блока или термина, с которыми вы должны ознакомиться при первом знакомстве с DynamoDB. Ваши данные находятся по адресу:

  1. Таблица
  2. Пункт
  3. КВ Атрибут.

Это трехуровневая иерархия. Сначала он принадлежит таблице (некоторые используют одну таблицу), затем элементу, а затем ваши внутренние фактические значения данных находятся во внутренних kv-атрибутах внутри элементов.

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

Как будто ваш ключ разделен на:

(в части 1 вы должны указать ее полностью, в части вы можете указать диапазон).

Более визуально, как это сложно, как я это вижу:

Итак, что происходит выше. Обратите внимание на следующие наблюдения. Как мы уже говорили, наши данные принадлежат (Table, Item, KVAttribute). Тогда каждый элемент имеет первичный ключ. Теперь то, как вы составляете этот первичный ключ, имеет значение для того, как вы можете получить доступ к данным.

Если вы решите, что ваш PrimaryKey — это просто хэш-ключ, то отлично, что вы можете получить из него один элемент. Однако если вы решите, что вашим первичным ключом является hashKey + SortKey, вы также можете выполнить запрос диапазона для своего первичного ключа, потому что вы получите свои элементы с помощью (HashKey + SomeRangeFunction (для ключа диапазона)). Таким образом, вы можете получить несколько элементов с помощью запроса первичного ключа.

Примечание. Я не имел в виду вторичные индексы.

Надеюсь туман рассеялся.