Виды баз данных
Чтобы ваше приложение было быстрым и удобным в использовании, интернет-магазин предвосхищал пожелания клиентов, а проблемы логистики и простоя складов решались в разы эффективнее — без системы управления базы данных (СУБД) не обойтись. Её наличие влияет на опыт пользователей, бизнес-процессы, информационную безопасность, расходы на разработку и содержание IT-инфраструктуры. Рассмотрим, какие типы баз данных существуют, чтобы вы смогли разобраться в особенностях современных СУБД и выбрать оптимальный вариант.
Реляционные базы данных
Реляционные БД ещё называют SQL базами, потому что для взаимодействия с ними обычно используют Structured Query Language — язык структурированных запросов. Реляционные СУБД хранят информацию в строках и столбцах, как электронные таблицы, скажем, Microsoft Excel. Строки содержат сведения об объекте, а столбцы определяют тип данных.
Например, для сотрудников компании (объектов) можно составить таблицу с колонками «фамилия», «имя», «отчество», «дата рождения», «должность» (названия атрибутов) и вписать соответствующие данные. Каждая строка формирует уникальный набор атрибутов, которому присваивается идентификатор — ключ. По этому ключу можно связать данные из разных таблиц, допустим, сведения о сотруднике из отдела кадров и список его заказчиков из отдела продаж.
Самые популярные реляционные СУБД — Oracle Database, MySQL, Microsoft SQL Server, PostgreSQL, IBM Db2. Они хорошо работают со структурированными данными, но не подходят для управления большими объёмами неструктурированных и полуструктурированных данных. С этим лучше справляются другие типы баз данных — NoSQL («Not Only SQL» — «не только SQL»), о которых расскажем дальше.
Базы данных Key-value (ключ-значение)
Этот способ хранения информации основан на том, что каждому уникальному ключу соответствует определённый набор данных — связанные с ним значения. Такими данными могут быть обычные числа или сложные объекты, например, изображения или видео.
В отличие от реляционных БД, структура хранилищ key-value более гибкая и простая: не нужно выполнять ресурсоёмкие объединения многочисленных таблиц, чётко определять тип данных для строк и столбцов, заменять необязательные значения плейсхолдерами. Зато можно упаковать разные данные из профиля пользователя — язык, часовой пояс и другие персонализированные настройки — в один объект (значение), связать с ID клиента (ключом) и потом мгновенно извлечь пользовательские предпочтения одной командой.
Базы данных «ключ-значение», такие как Redis, Amazon DynamoDB, Memcached хорошо справляются с хранением настроек ПО, управлением сеансами и кешированием.
Документоориентированные базы данных
Эти БД также используют принцип «ключ-значение», но кодируют информацию в виде документов — файлов в формате JSON, BSON, XML. Каждый документ содержит сведения об одном объекте и может включать полуструктурированные или полностью неструктурированные данные. Связи между разными типами информации об объекте представляются в виде вложений, массивов или ссылок на другие документы.
Предположим, в файл с основными сведениями о сотруднике можно добавить вложенный объект с данными его аккаунта в соцсетях, но при этом необязательно вносить такую же информацию в файлы других работников.
В отличие от БД «ключ-значение» документоориентированные СУБД позволяют делать запросы на основе содержимого, то есть могут извлекать весь документ или только его часть. Популярные решения типа MongoDB и Couchbase хранят документы в виде коллекций, но есть СУБД, которые используют теги или древовидные иерархии для удобной организации файлов.
Графовые базы данных
Многие разновидности баз данных помогают находить связи между данными, но графовые БД идут дальше — они сохраняют эти связи рядом с исходными данными. В этом варианте для хранения данных используются «узлы», а для определения отношений между ними — «рёбра». Например, информацию о Брюсе Уильямсе (узел) можно связать с фильмами «Крепкий орешек» и «Последний бойскаут» (также узлы), соединив их рёбрами с указанием, что актёр играл в этих картинах (свойство). Таким образом графовая СУБД быстро найдёт все фильмы с Брюсом Уильямсом для пользователя онлайн-кинотеатра, который уже просмотрел одну из картин или интересовался информацией об актёре.
Помимо рекомендательных систем, графовые БД активно используются для выявления мошеннических схем, оптимизации логистики, анализа данных о клиентах из социальных сетей.
Среди популярных СУБД — Neo4J, InfiniteGraph, Amazon Neptune.
Wide-column stores (расширяемые хранилища записей)
Этот вид баз данных относится к категории NoSQL, несмотря на то, что здесь используются таблицы, строки и столбцы. В отличие от реляционных БД, в решениях wide-column названия и формат столбцов могут меняться в одной и той же таблице от строки к строке. Так, для одного продукта можно сделать два столбца (цена и количество), а для другого — три (цена, количество, цвет). Столбцы фактически представляют собой уже знакомые пары «ключ-значение» (например, «цвет — красный»), но их можно объединять в семейства, где ключ будет соответствовать целому набору столбцов. Благодаря такой гибкости, базы данных wide-column могут хранить большие объёмы данных с разной степенью структурированности.
Wide-column СУБД типа Apache Cassandra, Apache HBase, Google Cloud Bigtable часто используются для построения корпоративных хранилищ данных, систем веб-аналитики, приложений для обработки больших данных в режиме реального времени.
Базы данных временных рядов
Для хранения данных с временными метками часто используют специализированные решения. Хотя универсальные типы БД также подходят для этой цели, они по умолчанию не оптимизированы для обработки временных рядов, например, показаний датчиков или данных о производительности приложений.
Базы данных временных рядов похожи на хранилища key-value, поскольку записывают время (ключ) и соответствующие ему изменения в данных. Такие наборы обычно однородные и не требуют длительного хранения, так как информация со временем теряет актуальность. БД временных рядов используют эту специфику, например, чтобы эффективно сжимать данные или автоматически удалять устаревшие наборы.
БД временных рядов могут быть реляционными (TimescaleDB) или NoSQL (Prometheus, InfluxDB).
Search Engine Databases (поисковые базы данных)
Эти БД оптимизированы для поиска на основе пользовательских запросов и могут быстро находить информацию в больших объёмах данных, в том числе неструктурированных. Они сохраняют каждый фрагмент данных как документ, анализируют его и индексируют. Индексы позволяют находить все документы, соответствующие запросу, а ранжирование по релевантности — быстрее обрабатывать результаты поиска.
Обычно поисковые базы данных поддерживают полнотекстовый поиск, сложные поисковые выражения, вторичные индексы, геопространственный поиск. Их удобно использовать для анализа логов, поиска по сайтам, базам знаний и продуктам.
Elasticsearch и Apache Solr — наиболее известные примеры не реляционных поисковых БД.
Объектно-ориентированные базы данных
ООБД хранят и обрабатывают данные как объекты — определённые сущности с собственным набором атрибутов и доступных действий. Такие объекты создают разработчики, которые пишут код на объектно-ориентированном языке программирования — Java, C++ или Python.
Допустим, карточка товара для интернет-магазина будет написана как объект с атрибутами (название, цена) и доступными методами работы (взаимодействие, изменение). В таком виде она будет храниться в ООБД, позволяя работать с объектом напрямую, без необходимости преобразовывать карточку в таблицы со связями и обратно.
ООБД хорошо подходят для приложений, где используются сложные модели данных: мультимедийные приложения, CAD-системы, телекоммуникационные решения.
Варианты популярных ООБД — ObjectStore, db4o, Actian NoSQL Database.
Resource Description Framework (среда описания ресурса)
RDF — это стандартизированный способ представления информации о ресурсах, пригодный для машинной обработки и основанный на графах. Графы выражают отношения между данными при помощи структуры «субъект-предикат-объект». Например, связь между Человеком-пауком и Зелёным Гоблином можно описать так: «Человек-паук (описываемый субъект) – является врагом (предикат, описывающий отношения) – Зелёного Гоблина (объект, связанный с субъектом)».
Некоторые БД — RDF4J, Stardog, Blazegraph — специально спроектированы для хранения и управления данными, структурированными в формате RDF. Для эффективного извлечения информации они используют языки запросов, например, SPARQL.
Мультимодальные СУБД
Мультимодальные СУБД объединяют разные типы баз данных, чтобы упростить управление большими потоками разномастной информации. Некоторые гибридные СУБД предлагают движки, способные поддерживать различные модели данных, другие — имеют многоуровневую архитектуру с отдельными компонентами для каждой модели.
Так, Oracle изначально была реляционной БД, но сейчас работает также как графовая и документная. ArangoDB, в свою очередь, поддерживает графы, документы JSON и модель «ключ-значение» в качестве основного функционала и использует унифицированный язык запросов AQL (ArangoDB Query Language).
Мультимодальные СУБД часто используются в приложениях, требующих интеграции данных из различных источников, например, текстовых документов, изображений и данных соцсетей.
Native XML СУБД
Нативные базы данных XML хранят и обрабатывают большие объёмы информации в формате XML (Extensible Markup Language или «расширяемый язык разметки»). В отличие от реляционных СУБД, в которых поддержка XML реализуется через дополнения, нативные базы хранят XML-документы в естественной иерархической форме. Они также поддерживают специальные языки XPath, XQuery, XProc для быстрого поиска и обработки.
Native XML СУБД, например, MarkLogic, BaseX, eXist-db, подходят для приложений, которым нужно управлять смешанным контентом с помощью стандартизованных технологий. К их числу относятся системы управления контентом и документами, электронные архивы, рекомендательные сервисы.
Event СУБД (базы данных переходов состояний)
Этот специализированный тип БД также называют хранилищем событий. Event СУБД предназначены для записи истории изменений в системе и часто используются в качестве системы учёта. БД сохраняет события в неизменяемом виде и в хронологическом порядке, а новые события добавляются в конец журнала. Благодаря этому можно восстановить состояние сущности в любой момент её истории изменений.
По такому принципу работают EventStoreDB, NEventStore, IBM Db2 Event Store, а применяют Event СУБД в разработке микросервисов, инструментов расширенной аналитики, IoT приложений.
Контентные СУБД
Такие хранилища ориентированы на работу с цифровым контентом разных типов, включая тексты, документы, изображения, аудио и видео. По сравнению с электронными библиотеками контентные СУБД имеют расширенный функционал и предоставляют возможность хранить, изменять, искать и извлекать контент, используя подключение через API.
При добавлении пользовательского интерфейса они также могут работать в качестве движка для корпоративных порталов, приложений бизнес-аналитики, систем управления контентом или документами. Хранилища типа Apache Jackrabbit и ModeShape предоставляют полнотекстовый поиск, контроль версий, иерархическую структуризацию и механизмы разграничения доступа.
Навигационные СУБД
Навигационные (navigational) СУБД позволяют получать доступ к наборам данных только через связанные записи. Это старейшая модель, разработанная ещё в 1960-х годах и объединяющая иерархические и сетевые типы БД.
Иерархическая концепция основана на отношении «один ко многим», где данные образуют древовидную структуру по аналогии с папками на ПК: родительская папка может иметь нескольких «потомков», но у «потомка» может быть только один «родитель».
Сетевые БД организуют записи более гибким образом, поскольку допускают наличие нескольких «родителей» у одного «потомка», но в остальном сохраняют жёсткую структуру. Система управления иерархическими БД Information Management System (IMS) от IBM до сих пор находится в активном использовании.
Векторные базы данных
В этих БД могут храниться векторы — массивы чисел, представляющих данные в многомерных пространствах. Такие решения оптимизированы для использования в проектах машинного обучения и искусственного интеллекта, где векторные представления применяются для кодирования характеристик различных типов данных. Векторные СУБД предоставляют возможность поиска по сходству и поиска ближайшего соседа, что позволяет быстро находить похожие элементы на основе их векторных представлений.
Среди самых известных СУБД этого типа — Chroma, Milvus, Pinecone.
Заключение
Хотя реляционные БД остаются самым распространённым способом работы с данными, во многих случаях есть более эффективные альтернативы традиционным таблицам. Соотнесите возможности различных баз данных с требованиями и спецификой вашего проекта, чтобы выбрать оптимальный вариант. Учитывайте не только тип данных, с которыми планируете работать, но и опыт ваших разработчиков, перспективы масштабирования и интеграции с другими инструментами.