Открыть сервис

Key-Value Store

Key-Value Store (хранилище типа «ключ-значение») — это тип нереляционной (NoSQL) системы управления базами данных (СУБД), в которой данные хранятся и извлекаются в виде пар «ключ — значение». В такой модели каждый элемент данных имеет уникальный идентификатор (ключ), по которому можно получить доступ к ассоциированному с ним значению. Значение может быть любого типа: строка, число, JSON-объект, бинарный файл (BLOB) или другой структурированный набор данных.

Принцип работы

В основе Key-Value Store лежит простая ассоциативная модель, напоминающая хеш-таблицу. Операции с данными сводятся к трём базовым действиям: Put (запись пары ключ-значение), Get (чтение значения по ключу) и Delete (удаление пары по ключу). В отличие от реляционных баз данных (например, PostgreSQL), здесь отсутствуют схемы, таблицы, связи между записями и язык структурированных запросов (SQL). Поиск возможен только по ключу; фильтрация по содержимому значения или сложные запросы с объединением данных не поддерживаются на уровне ядра системы.

Ключ обычно представляет собой строку или бинарный массив, реже — число. Значение хранится как непрозрачный блок данных, который интерпретируется только приложением. Это обеспечивает высокую скорость операций, так как не требуется разбор структуры значения на стороне СУБД.

История

Концепция Key-Value Store восходит к ранним компьютерным системам, где данные хранились в виде простых ассоциативных массивов. Одним из первых промышленных решений стала Berkeley DB (разработка Калифорнийского университета в Беркли, 1991 год), которая использовалась в операционных системах и встроенных приложениях.

Массовое распространение Key-Value Store получили в середине 2000-х годов с ростом веб-приложений и облачных сервисов. Крупные интернет-компании (Amazon, Google, Facebook) столкнулись с необходимостью обрабатывать огромные объёмы данных с низкой задержкой, что было трудно достижимо на классических реляционных СУБД. В 2007 году компания Amazon представила сервис Amazon DynamoDB (на основе внутренней разработки Dynamo), а в 2008 году — Apache Cassandra (изначально создана в Facebook для поиска в почтовом ящике). В 2009 году вышла Redis (разработчик — Сальваторе Санфилиппо), которая стала одной из самых популярных in-memory Key-Value СУБД.

Классификация

Key-Value Store можно разделить по нескольким признакам.

По способу хранения

  • In-memory (в оперативной памяти): данные полностью или преимущественно хранятся в RAM. Обеспечивают минимальное время отклика (микросекунды), но требуют механизмов сохранения на диск для предотвращения потери данных. Примеры: Redis, Memcached.
  • Persistent (на диске): данные записываются на постоянный носитель (SSD/HDD). Скорость ниже, чем у in-memory, но объём хранимых данных может быть значительно больше. Примеры: LevelDB (Google), RocksDB (Facebook), Berkeley DB.
  • Гибридные: часть данных (наиболее часто запрашиваемая) держится в памяти, остальное — на диске. Пример: WiredTiger (используется в MongoDB).

По архитектуре

  • Централизованные (standalone): работают на одном сервере. Просты в развёртывании, но имеют ограничения по масштабированию и отказоустойчивости. Пример: Redis (в базовой конфигурации).
  • Распределённые (distributed): данные распределены по нескольким узлам (кластеру). Обеспечивают горизонтальное масштабирование и высокую доступность. Примеры: Amazon DynamoDB, Apache Cassandra, Riak KV.
  • Встраиваемые (embedded): библиотека, которая интегрируется непосредственно в приложение, не требуя отдельного серверного процесса. Примеры: LevelDB, RocksDB, LMDB.

По модели согласованности

  • Strong consistency (строгая согласованность): после записи все последующие чтения гарантированно возвращают актуальные данные. Снижает производительность в распределённых системах. Пример: etcd (использует алгоритм консенсуса Raft).
  • Eventual consistency (согласованность в конечном счёте): при отсутствии новых изменений все узлы кластера со временем придут к одному состоянию. Обеспечивает высокую скорость записи. Пример: Apache Cassandra (по умолчанию).
  • Read-your-writes (чтение собственных записей): клиент всегда видит результаты своих операций записи. Промежуточный вариант.

Применение

Key-Value Store востребованы в сценариях, где критичны скорость доступа и простота модели данных.

Кеширование

Наиболее распространённое применение. In-memory Key-Value Store (Memcached, Redis) используются для хранения результатов частых запросов к базе данных, сессий пользователей, HTML-фрагментов, данных API. Это позволяет разгрузить основную базу и ускорить работу веб-приложений.

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

В веб-приложениях данные сессии (например, корзина, аутентификационные токены) хранятся в Key-Value Store. Ключом служит идентификатор сессии (cookie), значением — сериализованный объект сессии.

Конфигурация и feature flags

Хранение настроек приложений, параметров конфигурации, флагов включения/отключения функций. Пример: etcd используется в Kubernetes для хранения конфигурации кластера.

Очереди сообщений

Некоторые Key-Value Store (Redis) поддерживают структуры данных, позволяющие реализовать простые очереди (list) и pub/sub-механизмы.

Игровая индустрия

Хранение состояния игрового мира, инвентаря персонажей, лидеров. Высокая скорость записи и чтения позволяет обрабатывать миллионы одновременных игроков.

Интернет вещей (IoT)

Сбор телеметрии с датчиков. Каждый датчик имеет уникальный ключ, значение — последнее показание или временной ряд.

Примеры реализаций

  • Redis (Remote Dictionary Server) — in-memory Key-Value Store с поддержкой сложных типов данных (строки, списки, множества, хеши, геопространственные индексы). Работает на одном узле, поддерживает репликацию master-slave и кластеризацию. Используется для кеширования, очередей, сессий.
  • Memcached — высокопроизводительная in-memory система, ориентированная на кеширование. Поддерживает только простые пары ключ-значение. Не имеет встроенной персистентности.
  • Amazon DynamoDB — полностью управляемый облачный сервис от Amazon Web Services. Распределённая система с автоматическим масштабированием. Поддерживает строгую согласованность (опционально) и встроенные индексы.
  • Apache Cassandra — распределённая децентрализованная СУБД с eventual consistency. Оптимизирована для записи. Используется в системах с огромными объёмами данных (например, в Netflix, Instagram).
  • LevelDB — встраиваемая библиотека от Google. Хранит данные на диске в виде LSM-дерева. Используется в браузере Google Chrome (для хранения cookies и сессий) и в блокчейн-платформах.
  • RocksDB — форк LevelDB от Facebook (продукт Meta, признанной экстремистской и запрещённой в РФ). Оптимизирован для работы на многоядерных процессорах и SSD. Используется в Apache Flink, MySQL (как подключаемый движок MyRocks).

Преимущества и недостатки

Преимущества

  • Высокая скорость: операции чтения и записи выполняются за O(1) или O(log N) в среднем.
  • Простота модели: отсутствие схемы упрощает разработку и миграции.
  • Горизонтальное масштабирование: распределённые Key-Value Store легко масштабируются добавлением узлов.
  • Низкая задержка: особенно у in-memory систем, что критично для реального времени.

Недостатки

  • Ограниченная функциональность запросов: невозможность выполнять сложные выборки, JOIN-операции, агрегации без внешних инструментов.
  • Отсутствие связей между данными: приложение само должно управлять ссылочной целостностью.
  • Сложность обеспечения согласованности в распределённых системах (CAP-теорема).
  • Потенциальные проблемы с дублированием данных: из-за отсутствия нормализации.

Критика

Основная критика Key-Value Store связана с их ограниченной выразительностью. Для задач, требующих сложных аналитических запросов (отчётность, бизнес-аналитика), они непригодны. Кроме того, разработчики, привыкшие к реляционным базам, часто сталкиваются с необходимостью вручную управлять индексами и связями, что увеличивает сложность кода. В некоторых случаях (например, при использовании eventual consistency) возможны временные расхождения данных, что неприемлемо для финансовых систем.

Источники

  1. C. J. Date. An Introduction to Database Systems (8th ed.). Addison-Wesley, 2003.
  2. G. DeCandia et al. Dynamo: Amazon’s Highly Available Key-value Store. In Proceedings of SOSP, 2007.
  3. A. Lakshman, P. Malik. Cassandra: A Decentralized Structured Storage System. ACM SIGOPS Operating Systems Review, 2010.
  4. S. Sanfilippo. Redis Documentation. Redis Labs, 2009–2025.
  5. J. Dean, S. Ghemawat. LevelDB: A Fast and Lightweight Key-Value Store. Google, 2011.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →