NoSQL базы данных

Сегодня реляционные БД уже не могут решить всех проблем хранения информации. Поэтому появились NoSQL БД (что означает – «не только SQL»).

В последнее время наметились 4 тренда (тенденции) в развитии технологий хранения данных:

1) увеличение объемов хранимых данных. Сегодня хранилища данных достигли невероятных размеров. Только за 2009 и 2010 годы в базах было сохранено больше информации, чем за всю предыдущую историю человечества;

2) взаимосвязанность данных. Информация перестала быть изолированной. Каждый кусочек знаний как-то связан с данными в других хранилищах информации. Страницы в интернете ссылаются на другие страницы. Тэги связывают помеченную информацию из разных источников и т.д.;

3) использование слабоструктурированной информации. Например, если раньше было достаточно 5-6 полей, чтобы описать мужскую сорочку, то теперь количество параметров может доходить до нескольких десятков. Причем, для разных сорочек будет использован разный набор параметров. В таких условиях становится крайне сложно заранее определить структуру таблицы, в которой хранится описание товара;

4) архитектура. В 80-х годах прошлого века типичная архитектура использовала один большой компьютер (mainframe) и одну базу данных. В 90-х распространение получила клинт-серверная архитектура. В новом веке активно используются web-сервисы, каждый со своей базой данных, и другие распределенные решения. Оказалось, что в таких условиях у реляционных баз данных резко падает производительность. И если для большинства web-сайтов производительности еще хватает, то для таких приложений как современные социальные сети или поисковые сервисы SQL базы данных оказались несостоятельны.

Существует четыре категории NoSQL БД:

1) Key-Value (Ключ-Значение) базы данных. Это очень простые по своей идее хранилища. Фактически это очень большие хэш-таблицы, где каждому ключу поставлено в соответствие значение. Такие базы могут очень быстро оперировать колоссальными объемами информации, но они имеют серьезные ограничения в языке запросов (например, Dynomite, Voldemort, Tokyo, Redis);

2) клоны BigTable. BigTable — это база данных разработанная компанией Google для собственных нужд. Эта база представляет собой большую таблицу с тремя измерениями: колонки, строки и временны'е метки. Такая архитектура позволяет добиться очень высокой производительности, кроме того, она хорошо масштабируется на множество компьютеров. Но это не реляционная база, и она не поддерживает многие возможности реляционных баз. В частности в BigTable нет операции объединения Join, нет сложных запросов и т.д. Компания Google не распространяет BigTable, поэтому на рынке появилось несколько независимо разработанных клонов этой базы (например, Hadoop, Hypertable и Cassandra);

3) документо-ориентированные базы данных. Такие базы немного напоминают Key-Value базы, но в данном случае, база данных знает, что из себя представляют значения. Обычно, значением является некоторый документ или объект, к структуре которого можно делать запросы (например, CouchDB и MongoDB);

4) базы данных, построенные на графах. Такие базы ориентированы на поддержку сложных взаимосвязей между объектами, и основываются на теории графов. Структура данных в таких базах представляет собой набор узлов, связанных между собой ссылками. При этом и узлы и ссылки могут обладать некоторым количеством атрибутов (например, Neo4j, AllegroGraph, Sones graphDB).

 

Также существует еще и пятая категорияобъектно-ориентированные БД, но ее обычно не относят к NoSQL. Такие базы предназначены для поддержки объектно-ориентированной парадигмы программирования. Их очень просто использовать в соответствующих языках программирования.