Разные системы управления базами данных (СУБД) поддерживают различные сценарии и требования. У СУБД долгая история. Сначала мы сделаем краткий обзор недавней истории, а затем расскажем о преобладающих на рынке категориях СУБД.
Историческая справка
Термином «база данных» обозначается много разных понятий. Более того, он наводит на мысли о других терминах: данные, информация, структура данных и управление. Базу данных можно определить как набор, или репозиторий данных, обладающий определенной структурой и управляемый системой управления базами данных (СУБД). Данные могут быть структурированными таблицами, слабоструктурированными XML-документами или вовсе не иметь структуры, описываемой какой-то заранее определенной моделью.
На заре развития базы данных были ориентированы в основном на поддержку приложений в сфере бизнеса; это положило начало математически точно определенной реляционной алгебре и реляционным системам баз данных. Кроме того, во многих отраслях бизнеса, а равно в научных приложениях используются массивы, изображения и пространственные данные, поэтому поддерживаются также новые модели, включая растровые изображения, карты и алгебраические операции с массивами. Графовые базы данных поддерживают запросы к графам, например о поиске кратчайшего пути между двумя вершинами. Они также обеспечивают простой обход графа.
С появлением веб-приложений, в частности социальных порталов, возникла необходимость поддерживать огромное количество запросов распределенным образом. Это привело к новой парадигме в области баз данных, получившей название NoSOL (Not Only SOL), с другими требованиями, например: примат производительности над отказоустойчивостью и возможность горизонтального масштабирования. В целом на эволюцию баз данных оказывали влияние разнообразные факторы, в том числе:
- функциональные требования: сама природа приложений, в которых используются базы данных, потребовала разработки расширений реляционных баз, таких как PostGIS (пространственные данные), или даже специализированных СУБД типа SciDB (для анализа научных данных);
- нефункциональные требования: успех языков объектно-ориентированного программирования породил новые тенденции, в частности объектно-ориентированные базы данных. Появились объектно-реляционные системы управления базами данных, перебрасывающие мост между реляционными базами и объектно-ориентированными языками. Взрывной рост объема данных и необходимость обрабатывать терабайты данных на стандартном оборудовании привели к появлению столбцовых баз данных, которые легко масштабируются по горизонтали.
Категории баз данных
Рождались и уходили в небытие различные модели баз данных, включая сетевую и иерархическую модель. Сейчас на рынке преобладают реляционные, объектно-реляционные и NoSOL базы данных. Не следует считать базы данных NoSOL и SOL соперниками - они дополняют друг друга. Применяя ту или иную систему баз данных, можно преодолеть ограничения технологий и выбрать оптимальный вариант.
Базы данных NoSQL
На базы данных NoSOL оказывает влияние теорема CAP, известная также как теорема Брюера. В 2002 году С. Джильберт и Н. Линч опубликовали ее формальное доказательство в статье «Brewer's conjecture and the feasibility of consistent, available, partition-tolerant web services». В 2009 году зародилось движение NoSOL. Сегодня насчитывается свыше 150 баз NoSOL (nosql-database.org).
Теорема CAP
Теорема CAP утверждает, что распределенная вычислительная система не может одновременно обеспечить все три следующих свойства:
- согласованность - все клиенты сразу же видят последние данные после каждого обновления;
- доступность - любой клиент может найти копию нужных данных даже в случае отказа узла. Иными словами, даже после выхода из строя части системы клиенты все равно могут обратиться к данным;
- устойчивость к разделению - система продолжает работать даже в случае утраты любого сообщения или отказа части системы.
Характер системы определяется тем, от какого свойства мы отказываемся. Например, пожертвовав согласованностью, мы получим простую, масштабируемую, высокопроизводительную систему управления базами данных. Зачастую основное различие между реляционной и NoSQL базой данных как раз и состоит в согласованности. В реляционной базе гарантируется выполнение свойств ACID (атомарность, согласованность, изолированность, долговечность). Напротив, во многих базах данных NoSQL принята модель BASE (basically available soft-state, eventual consistency - базовая доступность, неустойчивое состояние, согласованность в конечном счете).
Мотивация NoSQL
База данных NoSQL предоставляет средства для хранения нереляционных данных, их выборки и манипулирования ими. Такие базы являются распределенными, горизонтально масштабируемыми и, как правило, поставляются с открытым исходным кодом. NoSQL часто основана на модели BASE, отдающей предпочтение доступности над согласованностью. Эта модель дает неформальные гарантии того, что в отсутствие новых обновлений обращение к любому элементу данных рано или поздно вернет его последнюю версию. У такого подхода имеются следующие преимущества:
- простота проектирования;
- горизонтальная масштабируемость и простота репликации;
- отсутствие схемы;
- поддержка гигантских объемов данных.
Теперь рассмотрим некоторые типы баз данных NoSQL.
Хранилища ключей и значений
Хранилище ключей и значений - самый простой тип базы данных. Как следует из названия, хранилище основано на хеш-таблицах. Некоторые хранилища допускают хранение составных типов данных - списков и словарей. В некоторых ситуациях хранилища ключей и значений обеспечивают исключительную скорость, но им недостает поддержки сложных запросов и агрегирования. К числу наиболее известных баз данных такого типа относятся Riak, Redis, Memebase и MemcacheDB.
Столбцовые базы данных
Столбцовые базы данных организованы в виде совокупности столбцов, а не строк. Данные, принадлежащие одному столбцу, хранятся вместе.
В отличие от реляционных баз данных, добавление столбца обходится дешево и вы - полняется для каждой строки в отдельности. Количество столбцов в разных строках может различаться. Такая структура дает возможность исключить накладные расходы на хранение значений null. Эта модель ориентирована прежде всего на распределенные базы данных.
Одной из самых известных столбцовых баз данных является HBase, основанная на системе хранения Google Bigtable. Столбцовые базы данных проектировались в расчете на очень большие объемы данных, поэтому легко масштабируются. Если набор данных невелик, то использовать HBase не имеет смысла. Во-первых, в рекомендуемой топологии HBase должно быть не менее пяти узлов, а во-вторых, эта база сложна для изучения и администрирования.
Документные базы данных
Документная база данных предназначена для хранения слабоструктурированных данных. Основной единицей хранения в ней является документ. Данные в документах представлены в стандартных форматах, например: XML, JSON и BSON. Для документов не определена единая схема, они не обязаны иметь одинаковую структуру, поэтому обладают высокой степенью гибкости. В отличие от реляционных баз данных, изменить структуру документа легко, и эта процедура не мешает клиентам обращаться к данным.
Графовые базы данных
В основе графовых баз данных лежит теория графов. База данных содержит информацию о вершинах и ребрах графа. С вершинами и ребрами могут быть ассоциированы данные. Графовая база позволяет обходить вершины, следуя вдоль ребер. Поскольку граф - очень общая структура данных, такие базы можно использовать для представления самых разных данных. Самая известная реализация графовой базы данных с открытым исходным кодом и коммерческой поддержкой - Neo4j.
Теперь давайте поясним, что такое реляционные и объектно-реляционные базы данных.