Ключевые слова: база данных, СУБД, реляционные базы данных, нереляционные базы данных, NoSQL
Базы данных являются незаменимым инструментом в разработке программного обеспечения. Любая деятельность в информационном обществе так или иначе опирается на хранение данных и их обработку. С появлением и развитием новых задач для хранения больших данных возросла актуальность поиска решений для работы с ними.
До недавнего времени реляционная модель была идеальным вариантом, но сейчас для некоторых специфических проектов больше подходят новые модели хранения данных. Новые модели хранения получили название нереляционные или NoSQL и в последнее время набирают популярность и активно развиваются. На данный момент существуют уже сотни различных СУБД, каждая из которых имеет свои преимущества и недостатки и подходит для определенных задач. И чтобы иметь возможность подобрать наилучший инструмент для конкретно поставленной задачи, необходимо иметь инструменты тестирования и сравнительного анализа баз данных.
Чтобы выбрать, какую технологию использовать для хранения данных, необходимо не только иметь информацию о каждом виде баз данных, но и иметь возможность испытать их для своей задачи, провести тестирование. Следует систематизировать информацию на одном стенде, предоставить инструменты для тестирования и отчеты о выполнении тестов.
Для исследования и сравнительного анализа используются наиболее популярные в своем типе базы. Из всех моделей наиболее распространенной является реляционная модель, которая строится на отношениях между хранимой информацией. Из нереляционнных типов наибольшую популярность приобрели следующий модели: хранилище ключ-значение, распределенное хранилище, документно-ориентированные СУБД и базы данных на основе графов.
Для выбора приводится рейтинг издания DB-Engines, который строится на основе запросов в поисковых системах и числа результатов по ним, так же учитывая объём обсуждений в социальных сетях и число вакансий, связанных с этой технологией. Результаты сгруппированы по выбранным нами моделям и представлены в Таблице 1.
Таблица 1
Рейтинг баз данных
Модель |
Реляционная |
Ключ-значение |
Распределенное хранилище |
Документно-ориентированная |
На основе графов |
1 |
Oracle |
Redis |
Cassandra |
MongoDB |
Neo4j |
2 |
MySQL |
Memcached |
HBase |
Amazon DynamoDB |
Titan |
3 |
Microsoft SQL Server |
Riak KV |
Microsoft Azure Table Storage |
Couchbase |
Giraph |
4 |
PostgreSQL |
Hazelcast |
Hypertable |
CouchDB |
InfiniteGraph |
5 |
DB2 |
Enhache |
Google Cloud Bigtable |
RethinkDB |
Dgraph |
Источник информации: https//db-engines.com/en/
Исходя из рейтинга выберем для исследования наиболее востребованные базы данных для каждой модели:
Oracle — реляционная СУБД
Redis — хранилище ключ-значение
Cassandra — распределенное хранилище
MongoDB — документно-ориентированная СУБД
Neo4j — БД на основе графов
Представим для наглядности их распространенность на графике.
Рис. 1. График распространенности баз данных
Источник информации: https://www.pcweek.ru/infrastructure/article/detail.php
Далее для выбранных для исследования баз данных приводится подробная их характеристика, специфика и область применения. Для этого необходимо выяснить, как в каждой из них представляется информация.
В реляционной модели данные группируются в коллекции или таблицы, которые хранятся в структурированном виде и связываются с помощью атрибутов. Работа с данными строится на создании отношений между ними, которые позволяют связывать различные таблицы между собой, тем самым преобразуя их в единое хранилище.
Хранилище ключ-значение представляет данные в виде ассоциативного массива. В такой системе не требуется построение схемы данных и строгой типизации данных, в ней отсутствуют связи между значениями. Такая простота обеспечивает масштабируемость и быстродействие.
Документно-ориентированная БД представляет собой систему хранения иерархических структур документов, которые можно представить в виде дерева. Структура дерева начинается с корневого узла и может иметь несколько внутренних и листовых узлов. Данные не имеют строгих связей между собой, но эта модель позволяет создавать сложные структуры.
Для графовой модели данные представимы в виде узлов графа, а связи между ними — в виде ребер. Она позволяет создавать сильные связи между объектами, не ограничивая их типы и не создавая жесткой структуры.
Распределенные хранилища хранят данные, группируя их по столбцам. Строки и столбцы такой модели образуют разряженную матрицу, связи между данными не такие строгие, как в реляционной модели. В качестве ключей можно использовать как строки, так и столбцы.
Далее необходимо обозначить параметры, которые являются важными для тестирования. Для этого нужно понять, какие основные требования предъявляются к базам данных и каким образом их можно исследовать.
Одной из наиболее важных характеристик является высота быстродействия системы, то есть времени отклика на запрос. Под временем отклика понимается промежуток времени от момента запроса к БД и фактическим получением данных. От этого параметра зависит, как быстро можно будет оперировать данными, что во многом определяет быстродействие всего программного комплекса. Для тестирования времени отклика необходимо провести запросы каждого типа (чтение, изменение, добавление, удаление данных) и провести сравнение времени их выполнения.
Следующим важным параметром является масштабируемость базу данных. Для любой системы масштабируемость, то есть возможность справляться с увеличением нагрузки при добавлении ресурсов, является обязательным критерием. В случае СУБД рассматриваются два вида масштабируемости: горизонтальная и вертикальная. При горизонтальном масштабировании увеличивается число серверов СУБД, что позволяет распределить нагрузку между ними. Данные так же распределяются между серверами, что может усложнить работу в сильно связанных моделях баз данных. В свою очередь вертикальное масштабирование подразумевает увеличение мощности одного сервера. В этом случае не приходится распределять данные, но приходится заменять аппаратное обеспечение сервера или добавлять новые узлы.
СУБД должна обеспечивать целостность данных — устойчивость хранимых данных к разрушению и уничтожению, связанных с неисправностями технических средств, системными ошибками и ошибочными действиями пользователей. Оно включает в себя восстановление данных, защиту от ошибок при удалении данных, корректную работу в многопользовательском режиме. База данных, которая не способна обеспечить целостность хранимой в ней информации, не может считаться надежной.
Предыдущие параметры определяли надежность и эффективность СУБД, но даже самая быстрая и безопасная база данных окажется бесполезной, если разрешенные в ней запросы не позволяют выполнять все необходимые для данной задачи манипуляции с данными. Поэтому последним параметром стоит указать возможности языка запросов, который используется для обращения к базе данных.
Приводится сравнительная таблица, в которой показаны возможности масштабируемости системы и язык запросов для выбранных для исследования баз данных.
Таблица 2
Сравнительная характеристика
База данных |
Масштабируемость [1] |
Запросы |
Oracle |
Вертикальная |
SQL |
Redis |
Вертикальная |
Команды Redis |
Cassandra |
Горизонтальная |
CQL [2] |
MongoDB |
Горизонтальная |
JavaScript |
Neo4j |
Вертикальная |
Cypher [3] |
Источники данных:
[1] — Эрик Редмонд, Джим. Р. Уилсон. Семь баз данных за семь недель.
[2] — https://ru.wikipedia.org/wiki/Apache_Cassandra
[3] — https://ru.wikipedia.org/wiki/Neo4j
Вопрос оптимального выбора решения для хранения данных становится все более актуальным с развитием новых моделей баз данных. Представленные анализ и сравнительная характеристика позволяют создать унифицированный подход к тестированию и исследованию СУБД, в независимости от их модели, структуры представления данных и языка запросов, что в свою очередь позволит эффективно использовать ресурсы системы.
Литература:
1. Эрик Редмонд, Джим. Р. Уилсон. Семь баз данных за семь недель. Введение в современные базы данных и идеологию NoSQL. — М.: ДМК Пресс, 2013. — 384 с.
2. DB-Engines [электронный ресурс] //db-engines.com/en/ (дата обращения: 04.03.2017)
3. Apache Cassandra [электронный ресурс] //ru.wikipedia.org/wiki/Apache_Cassandra (дата обращения 05.03.2017)
4. Neo4j [электронный ресурс] //ru.wikipedia.org/wiki/Neo4j (дата обращения 05.03.2017)
5. Что стоит за рейтингом популярности СУБД [электронный ресурс] www.pcweek.ru/infrastructure/article/detail.php (дата обращения 05.03.2017)