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

RavenDB

RavenDB — это документоориентированная система управления базами данных (NoSQL-СУБД), разработанная в Израиле компанией Hibernating Rhinos. Основным отличием RavenDB от многих других NoSQL-решений является полная поддержка ACID-транзакций (атомарность, согласованность, изоляция, долговечность) на уровне одного документа и поддержка индексов на основе MapReduce. Система ориентирована на работу с JSON-документами и предоставляет встроенную поддержку языка запросов, схожего с LINQ (Language Integrated Query). RavenDB является кроссплатформенным решением, работающим на Windows, Linux, macOS и в контейнерных средах (Docker).

История

Проект RavenDB был основан в 2009 году Ореном Эйни (Oren Eini), известным в сообществе .NET-разработчиков под псевдонимом Ayende Rahien. Первая публичная версия (RavenDB 1.0) была выпущена в 2010 году. Изначально СУБД создавалась как альтернатива реляционным базам данных для проектов на платформе .NET Framework.

Ключевые этапы развития:

  • 2010 год — выход RavenDB 1.0 с поддержкой документов и базовых индексов.
  • 2012 год — RavenDB 2.0: добавлена поддержка репликации и шардирования (горизонтального масштабирования).
  • 2014 год — RavenDB 3.0: введена поддержка встраиваемого режима (Embedded), улучшена производительность.
  • 2018 год — RavenDB 4.0: переход на кроссплатформенную архитектуру (CoreCLR), поддержка Linux и macOS, внедрение нового формата хранения данных (Voron).
  • 2021 год — RavenDB 5.0: добавлена поддержка временных рядов (Time Series) и облачных развёртываний.
  • 2024 год — RavenDB 6.0: улучшена работа с распределёнными кластерами, введена поддержка полнотекстового поиска на основе Lucene.

Архитектура и устройство

Документная модель

RavenDB хранит данные в виде JSON-документов. Каждый документ имеет уникальный идентификатор (ID), метаданные (включая коллекцию, к которой он принадлежит) и само содержимое в формате JSON. В отличие от реляционных баз данных, RavenDB не требует предварительного определения схемы (schemaless): разные документы в одной коллекции могут иметь различный набор полей.

Механизм хранения Voron

Начиная с версии 4.0, RavenDB использует собственный движок хранения данных — Voron. Это низкоуровневое хранилище, оптимизированное для работы с B-деревьями (B-trees) и журналом упреждающей записи (Write-Ahead Log, WAL). Voron обеспечивает высокую производительность операций чтения и записи, а также гарантирует ACID-транзакции на уровне одного документа.

Индексация и MapReduce

RavenDB использует асинхронную индексацию. Индексы создаются на основе MapReduce-функций, написанных на C# (LINQ-подобный синтаксис). Процесс индексации выполняется в фоновом режиме, что позволяет не блокировать операции записи. Индексы могут быть статическими (заданными разработчиком) или автоматическими (создаваемыми системой на основе запросов).

Кластеризация и репликация

RavenDB поддерживает распределённые кластеры на основе протокола Raft. Данные реплицируются между узлами кластера, обеспечивая отказоустойчивость. В случае выхода из строя одного узла, система автоматически переключается на другой. Поддерживается шардирование (распределение данных по нескольким узлам) для горизонтального масштабирования.

Классификация и виды

RavenDB относится к классу документоориентированных NoSQL-СУБД. Внутри этого класса выделяют следующие варианты поставки:

  • Серверный режим (Server Mode) — полноценный сервер базы данных, работающий как отдельное приложение или служба.
  • Встраиваемый режим (Embedded Mode) — библиотека, встраиваемая непосредственно в приложение (доступна для .NET и Node.js). В этом режиме база данных запускается внутри процесса приложения.
  • Облачный сервис (RavenDB Cloud) — управляемый сервис, предоставляемый компанией Hibernating Rhinos в облачных провайдерах (AWS, Azure, Google Cloud). Включает автоматическое резервное копирование и мониторинг.

Применение и значение

RavenDB используется в различных сферах, где требуется высокая скорость операций записи и чтения, гибкая схема данных и поддержка сложных запросов. Основные области применения:

  • Веб-приложения и микросервисы — RavenDB часто используется в качестве основной базы данных для серверных приложений на платформе .NET Core. Благодаря встроенной поддержке HTTP API, она может взаимодействовать с любым языком программирования.
  • Системы управления контентом (CMS) — гибкая схема данных позволяет хранить разнородные типы контента без необходимости миграции схемы.
  • Финансовые и учётные системы — поддержка ACID-транзакций и встроенные механизмы аудита (Change Tracking) делают RavenDB пригодной для систем, требующих строгой согласованности данных.
  • Интернет вещей (IoT) — RavenDB поддерживает работу с временными рядами, что позволяет эффективно хранить и анализировать данные с датчиков и устройств.
  • Научные исследования и аналитика — встроенные возможности агрегации (MapReduce) позволяют выполнять сложные аналитические запросы без дополнительных инструментов.

Критика и ограничения

Несмотря на широкие возможности, RavenDB имеет ряд ограничений и критических замечаний:

  • Зависимость от экосистемы .NET — хотя RavenDB является кроссплатформенной, её инструменты администрирования и клиентские библиотеки для некоторых языков (C#, F#, VB.NET) имеют более богатую функциональность, чем для других (Java, Python, Node.js).
  • Сложность настройки кластера — для обеспечения высокой доступности и отказоустойчивости требуется понимание протокола Raft и сетевой инфраструктуры. Неправильная конфигурация кластера может привести к потере данных или разделению сети (split-brain).
  • Производительность при больших объёмах данных — при работе с очень большими наборами данных (терабайты и более) производительность индексации может снижаться, особенно при использовании сложных MapReduce-функций.
  • Отсутствие встроенной поддержки SQL — в отличие от некоторых гибридных NoSQL-систем (например, PostgreSQL с JSONB), RavenDB не поддерживает язык SQL. Для запросов используется либо LINQ-подобный синтаксис, либо HTTP API с JSON-запросами (RQL — Raven Query Language).

Интересные факты

  • Название «Raven» (ворон) выбрано создателем как отсылка к стихотворению Эдгара Аллана По «Ворон». Орен Эйни объяснял, что ворон символизирует мудрость и долговечность.
  • RavenDB является одной из немногих NoSQL-СУБД, которая прошла сертификацию ACID на уровне одного документа. Это достигается за счёт использования механизма блокировок на уровне документа и журнала WAL.
  • Встроенный веб-интерфейс управления (Studio) позволяет выполнять запросы, просматривать индексы и управлять кластером через браузер, не требуя установки дополнительных клиентских приложений.
  • Компания Hibernating Rhinos предоставляет бесплатную версию RavenDB (Community Edition) с ограничением на количество документов (до 3 ГБ данных) и отсутствием поддержки кластеризации.

Источники

  • Официальная документация RavenDB (ravendb.net/docs)
  • Oren Eini. «RavenDB 4.x: The Complete Guide». Hibernating Rhinos, 2020.
  • Статья «RavenDB: A NoSQL Document Database for .NET» на портале InfoQ (2018).
  • Документация по протоколу Raft в RavenDB (ravendb.net/docs/server/clustering/rachis).

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

На главную BFOmetr →