В современном мире почти все информационные технологии так или иначе связаны со сбором, хранением и обработкой информации, а значит с базами данных. Во времена зарождения баз данных были разработаны несколько моделей баз данных: реляционная, сетевая, иерархическая и др.
Из-за удобства и простоты реализации реляционные базы данных (БД) много лет лидировали по популярности и продолжают пользоваться спросом. Яркие представители — Oracle, MSSQL, PostgreSQL и другие. Реляционные БД хранят структурированные данные в виде таблиц и отношений между ними. Например, сведения о транзакциях в банке или прайсы товаров для магазина, бухгалтерские данные. И большинство людей под термином БД — сейчас понимают именно реляционные БД (их еще называют «Традиционными БД»), хотя уже вышли из тени и занимают все большую долю другие технологии хранения.
Не все данные удобно ложатся на структуру реляционных БД. Например, сложные массивы документов могут храниться в документо-ориентированных иерархических структурах данных. А может идти речь о хранении в одной БД разных типов данных: документы, фото, видео, какой-либо статистики, онлайн измерений и пр. То, что в реляционной БД занимает множество таблиц в не реляционной БД может лежать в одном объекте. Например, все сведения об одном человеке.
Для реляционных БД был создан стандарт языка запросов SQL (StructuredQueryLanguage). Который постоянно развивается и которому стараются придерживаться все производители реляционных БД. Поэтому все виды не реляционных БД объединяют в направление NoSQL.
В начале термин NoSQL появился как отрицание поддержки SQL (не SQL), но потом его расширили и теперь он означает «не только SQL». На самом деле это не одна технология, а целое направление технологий хранения данных для разных целей. Не существует база данных, которая подойдет абсолютно всем. Именно поэтому используют реляционные или нереляционные БД для решения различных задач. Каждый раз выбирается лучшее решение.
Попробуем рассмотреть разницу SQL — NoSQL БД.
Для данных SQL характерно требование ACID (Atomicity, Consistency, Isolation, Durability — атомарность, непротиворечивость, изолированность, долговечность), когда данные строго структурированы, связаны правилами и требуют абсолютной целостности [1].
В таблице 1 показано как это может выглядеть.
Таблица 1
Таблица данных для SQL
name |
sex |
age |
friend |
Tom |
m |
29 |
Mary, Sasha |
Mary |
w |
25 |
Тоm, Masha, Paul |
Paul |
m |
30 |
Mary |
Sasha |
w |
19 |
Tom, Masha |
Masha |
w |
18 |
Mary, Sasha |
Для NoSQL это может храниться в виде отдельных объектов (рис. 1):
Рис. 1. Данные для noSQL
Причем каждый из объектов не обязан хранить одинаковую информацию. У кого-то может быть домашний адрес, у кого-то список телефонов и прочая информация:
[name:Tom, sex:m, age:29]
[name:Mary, profession:seller, phone:125871, city:Moscow]
При реляционном хранении потребуется описание дополнительных полей или таблиц. NoSQL не накладывает ограничений на типы хранимых данных и, при необходимости, в процессе работы, можно добавлять «на лету» новые типы.
Когда используются NoSQL?
Если нужна высокая масштабируемость. Это одна из самых главных, если не самая главная причина использования NoSQL БД, потому что за счет своей пониженной сложности они легче масштабируются. Если раньше основные тяготы по масштабированию ложились на приложение, чтобы обеспечить безотказность и масштабируемость, то современные базы данных берут все на себя, в некоторых не надо даже ничего настраивать. Просто запускаешь, она сама находит кластер, вступает в него, скачивает часть данных и начинает отдавать часть данных.
Линейная масштабируемость. Это когда путем увеличения ресурсов кластера получаем пропорциональное увеличение характеристик. Удвоили количество серверов — получили в два раза больше производительность.
Прототипирование. Традиционно реляционные базы данных требуют предварительной разработки структур и обслуживание в дальнейшем Зачем делать, когда можно не делать? Поэтому бес схемные базы данных, документ-орентирование например, этим и привлекают. Можно просто начать использовать новую схему данных, и она появится в ваших файловых данных. Это сильно ускоряет и упрощает создание продукта.
Высокая доступность. Мы разносим нашу базу данных по нескольким дата-центрам. Если вдруг в какой-то из них исчезает, то мы можем обратится в другие дата-центры, и доступная база данных нам это позволит.
Хранилище бинарных данных. Например, нам нужно хранить фото или видео — это очень сложная проблема, если фотографий очень много. Например, можно поднять локальный кластер с Riak’ом или Mongo и хранить файлы там.
Где используется NoSQL? Это, естественно, знакомые всем социальные сети и не только! Среди тех, кто использует NoSQLСУБД Cassandra для ведения огромных интернет-баз, такие компании, как Twitter, Netflix, Cisco, OpenX, CloudKick и другие. Самый крупный кластер Cassandra хранит более 300 Тбайт данных на 400 узлах. А в Google была разработана собственная СУБД BigTable [2].
Занимаясь поиском системы управления базами данных, можно выбрать одну технологию, а позже, уточнив требования, переключиться на что-то другое. Однако, разумное планирование позволит сэкономить немало времени и средств.
Вот признаки проектов, для которых идеально подойдут SQL-базы. Имеются логические требования к данным, которые могут быть определены заранее: очень важна целостность данных; нужна основанная на устоявшихся стандартах, хорошо зарекомендовавшая себя технология, используя которую можно рассчитывать на большой опыт разработчиков и техническую поддержку.
А вот свойства проектов, для которых подойдёт что-то из сферы NoSQL. Требования к данным нечёткие, неопределённые, или развивающиеся с развитием проекта: цель проекта может корректироваться со временем, при этом важна возможность немедленного начала разработки; одни из основных требований к базе данных — скорость обработки данных и масштабируемость.
В итоге хочется сказать, что в современном мире нет противостояния между реляционными и нереляционными базами данных. Вместо этого стоит говорить об их совместном использовании для решения задач, на которых та или иная технология показывает себя лучше всего. Кроме того, всё сильнее наблюдается интеграция этих технологий друг в друга. Например, Microsoft, Oracle и Teradata сейчас предлагают некоторые формы интеграции с Hadoop для подключения аналитических инструментов, основанных на SQL, к миру неструктурированных больших данных.
Литература:
1.http://nosql-database.org/
2.MongoDB. MongoDB 2.6 Manual: http://docs.mongodb.org/manual/