База данных «ключ-значение» – это тип нереляционной базы данных, также известной как база данных NoSQL, в которой для хранения данных используется простой метод «ключ-значение». Это дает возможность хранить данные как совокупность пар «ключ‑значение», в которых ключ служит уникальным идентификатором. Как ключи, так и значения могут представлять собой что угодно: от простых до сложных составных объектов. Базы данных «ключ-значение» (или хранилища «ключ‑значение») поддерживают высокую разделяемость и обеспечивают беспрецедентное горизонтальное масштабирование, недостижимое при использовании других типов баз данных.

В чем преимущества баз данных «ключ-значение»?

Благодаря традиционным реляционным базам данных (базам данных SQL) информация хранится в виде таблиц, содержащих строки и столбцы. Они обеспечивают жесткую структуру данных и не всегда оптимальны. С другой стороны, базы данных «ключ-значение» – это базы данных NoSQL. В определенных случаях они обеспечивают гибкие схемы баз данных и улучшенную производительность при масштабировании. Хранилища «ключ-значение» имеют следующие преимущества.

Возможности масштабирования

Поскольку каждый пользовательский запрос требует взаимодействия с данными, базы данных часто могут препятствовать производительности приложений. Стратегии решения проблемы, такие как репликация и сегментирование, усложняют код приложения. Многие базы данных «ключ-значение» имеют встроенную поддержку расширенных функций масштабирования. Они масштабируются по горизонтали и автоматически распределяют данные, уменьшая количество проблем на каждом отдельном сервере.

Удобство использования

Базы данных «ключ-значение» основаны на объектно-ориентированной парадигме, которая позволяет разработчикам сопоставлять реальные объекты непосредственно с программными. Несколько языков программирования, например Java, следуют той же парадигме. Вместо сопоставления объектов кода с несколькими базовыми таблицами инженеры могут создавать пары «ключ-значение», соответствующие их кодовым объектам. Это делает хранилища ключей и значений более интуитивно понятными для разработчиков.

Производительность

Базы данных «ключ-значение» обрабатывают постоянные операции чтения и записи при минимальных затратах на серверные вызовы. Уменьшенная задержка и сокращение времени отклика обеспечивают более высокую производительность при масштабировании. Они основаны на простых структурах с одной таблицей, а не на нескольких взаимосвязанных. Базам данных «ключ-значение» не требуется выполнять ресурсоемкое объединение таблиц, в отличие от реляционных баз данных, что значительно ускоряет их работу.

Каковы варианты использования баз данных «ключ-значение»?

Системы баз данных «ключ-значение» можно использовать в качестве основных для приложений или решения нишевых задач. Ниже мы приводим несколько примеров использования базы данных «ключ-значение».

Управление сессиями

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

Каждая сессия пользователя имеет уникальный идентификатор. Данные сессий всегда запрашиваются только по первичному ключу, поэтому для их хранения отлично подходит быстрое хранилище пар «ключ‑значение». В целом базы данных на основе пар «ключ‑значение» могут снижать накладные расходы в расчете на страницу по сравнению с реляционными базами данных.

Корзина интернет‑магазина

Сайт интернет‑магазина может получать миллиарды заказов за считанные секунды во время праздничного сезона покупок. Используя базы данных «ключ‑значение», можно обеспечить необходимое масштабирование при существенном увеличении объемов данных и чрезвычайно интенсивных изменениях состояния. Такие базы данных также позволяют одновременно обслуживать миллионы пользователей благодаря распределенной обработке и хранению данных. Хранилища «ключ‑значение» также обладают встроенной избыточностью, что позволяет справляться с потерей узлов хранилища.

Механизм хранения метаданных

Хранилище «ключ-значение» может выступать в качестве базового уровня хранения для более высоких уровней доступа к данным. Например, можно увеличить пропускную способность и возможности параллельного запуска рабочих нагрузок мультимедиа и сферы развлечений, таких как потоковая передача видео в реальном времени и интерактивный контент. Кроме того, у вас появится возможность создать собственную игровую платформу с данными игроков, историей игровых сеансов и таблицами лидеров для миллионов одновременных пользователей.

Кэширование

Для временного хранения данных с целью их быстрого извлечения можно использовать базу данных «ключ-значение». Например, приложения социальных сетей могут хранить часто используемые данные, такие как контент новостной ленты. Системы кэширования данных в памяти также используют хранилища «ключ-значение» для ускорения ответов приложений.

Как работают базы данных «ключ-значение»?

Базы данных «ключ-значение» работают по принципу организации всех данных в виде набора пар «ключ-значение». Ключ можно рассматривать как вопрос, а значение – как ответ. В приведенном ниже примере первичный ключ состоит из двух ключей: идентификатора продукта и типа. Идентификатор продукта – это ключ с описанием секции, в которой будет храниться объект. Тип – это ключ сортировки, определяющий порядок хранения элементов на диске. Комбинация ключа секции и ключа сортировки образует уникальный первичный ключ, который соответствует одному значению в базе данных.

В этом примере книга объектов данных имеет такие атрибуты, как название, автор и дата публикации. У каждого объекта данных книги есть ключ BookID. Можно напрямую связать BookID и ассоциированный с ним объект книги в хранилище «ключ-значение». Также вы можете получить данные, просмотрев BookID в таблице. Кроме того, каждый элемент имеет собственную схему, что делает хранилища «ключ-значение» очень гибкими для хранения данных различной структуры.

Диаграмма, показывающая пример данных, хранящихся в виде пар «ключ‑значение» в DynamoDB

Каковы функции баз данных «ключ-значение»?

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

Поддержка сложных типов данных

Хранилища «ключ-значение» поддерживают определенные типы данных, такие как целые числа и текст. Однако многие из них также могут поддерживать более сложные объекты, такие как массивы, вложенные словари, изображения, видео и полуструктурированные данные. Предоставление базе данных дополнительной информации о ваших данных позволяет увеличить объем хранилища и оптимизировать производительность запросов.

Нет необходимости в объединении таблиц

Базам данных «ключ-значение» нет необходимости выполнять ресурсоемкое объединение таблиц. Их гибкость позволяет разместить всю необходимую информацию в одной таблице. Это одна из причин, по которой хранилища «ключ-значение» работают так хорошо.

Ключи сортировки

В хранилищах «ключ-значение» можно сортировать ключи, чтобы систематизировать данные и разбивать их на разделы. Например, ключи можно отсортировать следующими образами:

  • В алфавитном или цифровом порядке
  • Хронологически
  • По размеру данных

Рассмотрим хранилище «ключ-значение», в котором в качестве уникального ключа используется адрес электронной почты клиента. Адреса электронной почты можно сортировать в алфавитном порядке, поэтому все списки адресов электронной почты, начинающихся на буквы A-J, хранятся на сервере № 1, на K-S – на сервере № 2 и так далее.

Поддержка вторичного ключа

В некоторых хранилищах «ключ-значение» можно определить два или более разных ключа либо вторичных индекса для доступа к одним и тем же данным. Например, вы можете хранить данные клиентов по ключевым адресам электронной почты и ключевым номерам телефонов.

Репликация

Многие хранилища «ключ-значение» предлагают встроенную поддержку репликации путем автоматического копирования данных между несколькими узлами хранения. Это помогает автоматически восстанавливать данные – в случае сбоя сервера данные останутся в вашем распоряжении.

Разделение

Разделение – это способ распределения данных между узлами. Многие базы данных «ключ-значение» предоставляют параметры разделения по умолчанию. В некоторых из них также можно определить входные параметры для разделов. Например, можно разбить числовые ключи на группы по 1000. Расширенные базы данных «ключ-значение» также обеспечивают автоматическую поддержку распределения базы данных «ключ-значение» по нескольким географическим точкам. Это повышает доступность и надежность приложений, поскольку вы можете отвечать на запросы недалеко от местоположения пользователя.

Поддержка ACID

Принцип ACID (атомарность, непротиворечивость, изолированность, долговечность) – это свойства базы данных, которые обеспечивают точность и надежность данных при любых обстоятельствах. Например, если вы последовательно вносите несколько изменений в данные, то атомарность требует, чтобы все изменения проходили по порядку. Если не удается одно изменение, то не удаются и все остальные.

Расширенные базы данных «ключ-значение» обеспечивают встроенную поддержку принципа ACID на стороне сервера. Благодаря этому разработчики могут удобно и без ошибок вносить изменения в большое число элементов в пределах одной или нескольких таблиц. При поддержке транзакций разработчики могут использовать возможности масштабирования, производительности и прочие корпоративные преимущества сервиса при выполнении большего числа критически важных рабочих нагрузок.

Каковы ограничения баз данных «ключ-значение»?

Базы данных «ключ-значение» требуют некоторых компромиссов, как и при выборе любой технологии.

Отсутствие сложных запросов

Поскольку базы данных «ключ-значение» не поддерживают сложные запросы, разработчики должны решать эту проблему с помощью кода. В операциях с данными в основном используются простые термины, такие как get, put и delete. Существуют ограничения на фильтрацию и сортировку данных перед доступом к ним.

Управление схемой

Хранилище «ключ-значение» спроектировано так, что оно не навязывает разработчикам схему. Любой может изменить ее в программе базы данных. Команды разработчиков должны систематически планировать модель данных, чтобы избежать проблем в долгосрочной перспективе. Отсутствие жесткой схемы также означает, что приложение отвечает за правильную интерпретацию потребляемых данных. Эту схему часто называют «схемой при чтении».

Как AWS может удовлетворить ваши требования по работе с базой данных «ключ-значение»?

Amazon DynamoDB – это одна из самых популярных баз данных «ключ-значение», созданная для запуска высокопроизводительных приложений в любом масштабе. Это полностью управляемая многорегиональная и многоактивная база данных, которая предоставляет следующие функции.

  • Безграничная масштабируемость, включая масштабирование до нуля, с постоянной задержкой в несколько миллисекунд.
  • Бессерверная система без обновления версий, окон обслуживания, серверов и программного обеспечения для управления.
  • Глобальные таблицы DynamoDB обладают высокой доступностью и обеспечивают активную репликацию, что позволяет создавать глобально распределенные приложения с локальной производительностью чтения.
  • Высокая безопасность и надежность: шифрование по умолчанию в состоянии покоя, восстановление на момент времени, резервное копирование и восстановление по требованию и многое другое.
  • Простота в использовании благодаря интеграции со многими сервисами AWS, включая пакетный импорт/экспорт из Amazon S3, потоки данных Amazon Kinesis, Amazon Cloudwatch и другие.

С помощью этого пошагового руководства по созданию таблицы NoSQL и выполнению запросов можно настроить и запустить базу данных DynamoDB всего за 10 минут. Начните работу с базами данных «ключ-значение» на AWS, создав бесплатный аккаунт уже сегодня.

Знакомство с Amazon DynamoDB
Моделирование данных Amazon DynamoDB