OrientDB
OrientDB — это многомодельная система управления базами данных (СУБД) с открытым исходным кодом, которая поддерживает графовую, документную, объектно-ориентированную и ключ-значение модели данных. Разработана и поддерживается компанией OrientDB LTD. Относится к классу NoSQL-баз данных, но в отличие от многих других систем данного типа, поддерживает ACID-транзакции и SQL-подобный язык запросов.
История
Разработка OrientDB началась в 2007 году итальянским программистом Лукой Гараттини (Luca Garulli) как проект с открытым исходным кодом. Первоначально система позиционировалась как объектно-ориентированная база данных, но в процессе эволюции в неё была добавлена поддержка графовой модели и документов в формате JSON.
В 2010 году была выпущена первая стабильная версия. В 2013 году компания Orient Technologies, основанная Гараттини, получила инвестиции от венчурных фондов. В 2014 году вышла версия 2.0, в которой была значительно улучшена производительность и добавлена поддержка распределённых вычислений.
В 2017 году была выпущена версия 3.0, которая стала последним крупным релизом. В 2018 году компания OrientDB LTD объявила о переходе на модель двойного лицензирования: Community Edition (бесплатная, под лицензией Apache 2.0) и Enterprise Edition (коммерческая, с дополнительными функциями, такими как мониторинг и управление).
В 2021 году компания SAP (организация признана нежелательной в РФ) приобрела права на коммерческую версию OrientDB, что вызвало обеспокоенность сообщества относительно будущего открытой версии. По состоянию на 2024 год разработка Community Edition замедлилась, а последние обновления касаются в основном Enterprise Edition.
Модели данных
OrientDB поддерживает несколько моделей данных одновременно, что позволяет разработчикам выбирать наиболее подходящий способ хранения и обработки информации в рамках одной системы.
Графовая модель
Графовая модель является одной из ключевых особенностей OrientDB. Данные хранятся в виде вершин (вертекс) и рёбер (эдж), которые могут иметь свойства. В отличие от многих других графовых баз данных (например, Neo4j), OrientDB не требует отдельного движка для обработки графов — графовые операции встроены непосредственно в ядро СУБД. Это позволяет выполнять обходы графа (traversal) с высокой производительностью, используя алгоритмы, такие как поиск в ширину (BFS) и поиск в глубину (DFS).
Документная модель
OrientDB поддерживает документную модель, где данные хранятся в виде документов в формате, близком к JSON. Каждый документ принадлежит определённому классу (аналог таблицы в реляционных базах данных) и может содержать произвольный набор полей. Документы могут быть вложенными, что позволяет хранить сложные структуры данных без необходимости нормализации.
Объектно-ориентированная модель
OrientDB поддерживает объектно-ориентированную модель, включая наследование классов, полиморфизм и инкапсуляцию. Это позволяет разработчикам, работающим с объектно-ориентированными языками программирования (Java, Python, C#), отображать объекты приложения непосредственно на записи в базе данных без необходимости использования промежуточного слоя (ORM).
Модель «ключ-значение»
OrientDB также может использоваться как простое хранилище типа «ключ-значение», где ключом является идентификатор записи (RID), а значением — произвольные данные. Однако эта модель редко используется в качестве основной из-за наличия более мощных альтернатив в рамках той же системы.
Архитектура и устройство
Ядро и движки
OrientDB построена на модульной архитектуре. Основные компоненты:
- Ядро (Core): отвечает за управление транзакциями, кэширование, сериализацию и десериализацию данных.
- Движок хранения (Storage Engine): отвечает за физическое хранение данных на диске. Поддерживаются два основных типа: Plocal (локальное хранение) и Distributed (распределённое).
- Движок запросов (Query Engine): обрабатывает SQL-запросы, а также запросы на языке Gremlin (язык обхода графа).
- Движок индексов (Index Engine): управляет индексами для ускорения поиска. Поддерживаются B-деревья, хеш-индексы, полнотекстовые индексы (на основе Lucene) и пространственные индексы (R-деревья).
Транзакции и ACID
OrientDB поддерживает ACID-транзакции (Atomicity, Consistency, Isolation, Durability) на уровне одной записи или группы записей. Транзакции могут быть локальными (в рамках одного сервера) или распределёнными (в кластере). Уровень изоляции по умолчанию — Read Committed, но может быть повышен до Serializable.
Распределённая архитектура
OrientDB поддерживает распределённые конфигурации, включая кластеризацию и репликацию. Данные могут быть шардированы (разделены) по нескольким узлам. Поддерживаются два режима репликации:
- Синхронная репликация: все узлы подтверждают запись до завершения транзакции.
- Асинхронная репликация: запись подтверждается на одном узле, а затем распространяется на другие.
Для обеспечения отказоустойчивости используется протокол консенсуса, основанный на Raft (в версии 3.0 и выше).
Язык запросов
OrientDB использует SQL-подобный язык запросов, который расширен для работы с графами и документами. Основные команды:
SELECT— выборка данных, включая обход графа (например,TRAVERSE).INSERT,UPDATE,DELETE— модификация данных.CREATE CLASS,ALTER CLASS,DROP CLASS— управление схемой.CREATE VERTEX,CREATE EDGE— создание вершин и рёбер графа.
Пример запроса на обход графа:
``sql SELECT FROM (TRAVERSE out('Friend') FROM #12:1 WHILE $depth <= 3) WHERE age > 25 ``
Этот запрос находит всех друзей (и друзей друзей) вершины с идентификатором #12:1, у которых возраст больше 25, на глубине до 3 уровней.
Кроме SQL, OrientDB поддерживает язык Gremlin (часть экосистемы Apache TinkerPop), который является стандартом для графовых баз данных.
Применение
OrientDB используется в различных сферах, где требуется сочетание гибкости схемы и производительности графовых операций:
- Социальные сети: хранение и анализ связей между пользователями, рекомендации друзей.
- Рекомендательные системы: построение графов предпочтений и поведения пользователей.
- Управление идентификацией и доступом (IAM): хранение иерархий ролей и разрешений.
- Логистика и транспорт: моделирование маршрутов, цепочек поставок.
- Биоинформатика: анализ генных сетей и белковых взаимодействий.
Среди известных пользователей OrientDB — компании Sky (британский медиахолдинг), Deutsche Telekom, а также ряд стартапов в области финтеха и e-commerce.
Сравнение с другими СУБД
OrientDB часто сравнивают с Neo4j (графовая база данных) и MongoDB (документная база данных). Основные отличия:
- От Neo4j: OrientDB поддерживает SQL-подобный язык запросов и ACID-транзакции, в то время как Neo4j использует свой язык Cypher и не поддерживает ACID в полном объёме в распределённом режиме.
- От MongoDB: OrientDB поддерживает графовые операции и связи между документами, в то время как MongoDB является чисто документной базой данных без встроенной поддержки графов.
Однако OrientDB уступает Neo4j в производительности при глубоких обходах графа (более 10 уровней) и имеет меньшее сообщество разработчиков по сравнению с MongoDB.
Интересные факты
- Название OrientDB происходит от слова «ориентация» (ориентированность на объекты), а не от географического понятия.
- OrientDB поддерживает встроенный HTTP-сервер, что позволяет использовать его как RESTful-сервис без дополнительных библиотек.
- В версии 3.0 была добавлена поддержка полнотекстового поиска на основе Apache Lucene, что делает OrientDB пригодным для построения поисковых систем.
Критика
Основные недостатки OrientDB, отмечаемые сообществом:
- Сложность настройки: распределённая конфигурация требует глубоких знаний архитектуры и может быть трудоёмкой.
- Недостаточная документация: особенно для версии 3.0 и выше, многие функции описаны фрагментарно.
- Замедление разработки Community Edition: после приобретения коммерческой версии компанией SAP (организация признана нежелательной в РФ), обновления открытой версии стали редкими, что вызывает опасения по поводу долгосрочной поддержки.
- Проблемы с производительностью при больших объёмах данных: некоторые пользователи сообщают о снижении скорости при работе с кластерами, содержащими более 100 миллионов записей.
Источники
- Официальная документация OrientDB (orientdb.org)
- «OrientDB: The Definitive Guide» by Luca Garulli (O'Reilly Media, 2015)
- Статья «OrientDB: A Multi-Model NoSQL Database» на сайте InfoQ (2017)
- Обзор OrientDB на сайте DB-Engines (db-engines.com)
- Материалы конференции «NoSQL Now!» (2016)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →