Русская Википедия:NoSQL
NoSQL (от Шаблон:Lang-en — не только SQL) — обозначение широкого класса разнородных систем управления базами данных (СУБД), появившихся в конце 2000-х — начале 2010-х годов и существенно отличающихся от традиционных реляционных СУБД с доступом к данным средствами языка SQL. Применяется к системам, в которых делается попытка решить проблемы масштабируемости и доступности за счёт полного или частичного отказа от требований атомарности и согласованности данныхШаблон:Sfn.
Происхождение
История названия
Изначально слово NoSQL являлось акронимом из двух слов английского языка: No («Не») и SQL (сокращение от Шаблон:Lang-en — «структурированный язык запросов»), что даёт термину смысл «отрицающий SQL». Возможно, что первые, кто стал употреблять этот термин, хотели сказать «No RDBMS» («не реляционная СУБД») или «no relational» («не реляционный»), но NoSQL звучало лучше и в итоге прижилось (в качестве альтернативы предлагалось также NonRel). Позднее для NoSQL было придумано объяснение «Not Only SQL» («не только SQL»). NoSQL стал общим термином для различных баз данных и хранилищ, но он не обозначает какую-либо одну конкретную технологию или продуктШаблон:Sfn.
Развитие идеи
Сама по себе идея нереляционных баз данных не нова, а использование нереляционных хранилищ началось ещё во времена первых компьютеров. Нереляционные базы данных процветали во времена мэйнфреймов, а позднее, во времена доминирования реляционных СУБД, нашли применение в специализированных хранилищах, например, иерархических службах каталогов. Появление же нереляционных СУБД нового поколения произошло из-за необходимости создания параллельных распределённых систем для высокомасштабируемых интернет-приложений, таких как поисковые системыШаблон:Sfn.
В начале 2000-х годов Google построил свою высокомасштабируемую поисковую систему и приложения: GMail, Google Maps, Google Earth и т. п., решая проблемы масштабируемости и параллельной обработки больших объёмов данных. В результате была создана распределённая файловая система и распределённая система координации, хранилище семейств колонок (Шаблон:Lang-en), среда выполнения, основанная на алгоритме MapReduce. Публикация компанией Google описаний этих технологий привела к всплеску интереса среди разработчиков открытого программного обеспечения, в результате чего был создан Hadoop и запущены связанные с ним проекты, призванные создать подобные Google технологии. Через год, в 2007 году, примеру Google последовал Amazon.com, опубликовав статьи о высокодоступной базе данных Amazon DynamoDBШаблон:Sfn.
Поддержка гигантов индустрии менее чем за пять лет привела к широкому распространению технологий NoSQL (и подобных) для управления «большими данными», а к делу присоединились другие большие и маленькие компании, такие как: IBM, Facebook, Netflix, eBay, Hulu, Yahoo!, со своими проприетарными и открытыми решениямиШаблон:Sfn.
Основные черты
Традиционные СУБД ориентируются на требования ACID к транзакционной системе: атомарность (Шаблон:Lang-en), согласованность (Шаблон:Lang-en), изолированность (Шаблон:Lang-en), долговечность (Шаблон:Lang-en), тогда как в NoSQL вместо ACID может рассматриваться набор свойств BASEШаблон:Sfn:
- базовая доступность (Шаблон:Lang-en) — каждый запрос гарантированно завершается (успешно или безуспешно).
- гибкое состояние (Шаблон:Lang-en) — состояние системы может изменяться со временем, даже без ввода новых данных, для достижения согласования данных.
- согласованность в конечном счёте (Шаблон:Lang-en) — данные могут быть некоторое время рассогласованы, но приходят к согласованию через некоторое время.
Термин «BASE» был предложен Эриком Брюером, автором теоремы CAP, согласно которой, в распределённых вычислениях можно обеспечить только два из трёх свойств: согласованность данных, доступность или устойчивость к разделениюШаблон:Sfn.
Разумеется, системы на основе BASE не могут использоваться в любых приложениях: для функционирования биржевых и банковских систем использование транзакций является необходимостью. В то же время свойства ACID, какими бы желанными они ни были, практически невозможно обеспечить в системах с многомиллионной веб-аудиторией, вроде amazon.comШаблон:Sfn. Таким образом, проектировщики NoSQL-систем жертвуют согласованностью данных ради достижения двух других свойств из теоремы CAP[1]. Некоторые СУБД, например, Riak, позволяют настраивать требуемые характеристики доступности-согласованности даже для отдельных запросов путём задания количества узлов, необходимых для подтверждения успеха транзакции.[2]
Решения NoSQL отличаются не только проектированием с учётом масштабирования. Другими характерными чертами NoSQL-решений являютсяШаблон:SfnШаблон:Sfn:
- Применение различных типов хранилищШаблон:Sfn.
- Возможность разработки базы данных без задания схемыШаблон:SfnШаблон:Sfn.
- Линейная масштабируемость (добавление процессоров увеличивает производительность)Шаблон:Sfn.
Типы систем
Описание схемы данных в случае использования NoSQL-решений может осуществляться через использование различных структур данных: хеш-таблиц, деревьев и других.
В зависимости от модели данных и подходов к распределённости и репликации в NoSQL-движении выделяются четыре основных типа систем: «ключ — значение» (Шаблон:Lang-en), «семейство столбцов» (Шаблон:Lang-en2), документоориентированные (Шаблон:Lang-en2), графовые.
Ключ — значение
Модель «ключ — значение» является простейшим вариантом, использующим ключ для доступа к значению. Такие системы используются для хранения изображений, создания специализированных файловых систем, в качестве кэшей для объектов, а также в системах, спроектированных с прицелом на масштабируемость. Примеры таких хранилищ — Berkeley DB, Шаблон:Iw, Redis, Riak, Amazon DynamoDBШаблон:Sfn.
Семейство столбцов
Шаблон:Falseredirect Другой тип систем — «семейство столбцов», прародитель этого типа — система Google BigTable. В таких системах данные хранятся в виде разреженной матрицы, строки и столбцы которой используются как ключи. Типичным применением этого типа СУБД является веб-индексирование, а также задачи, связанные с большими данными, с пониженными требованиями к согласованности. Примерами СУБД данного типа являются: Apache HBase, Apache Cassandra, Шаблон:Iw, Шаблон:Iw, Шаблон:IwШаблон:SfnШаблон:Sfn.
Системы типа «семейство столбцов» и документно-ориентированные системы имеют близкие сценарии использования: системы управления содержимым, блоги, регистрация событий. Использование временных меток позволяет использовать этот вид систем для организации счётчиков, а также регистрации и обработки различных данных, связанных со временемШаблон:Sfn.
В отличие от столбцового хранения, применяемого в некоторых реляционных СУБД, хранящих данные по столбцам в сжатом виде для эффективности в OLAP-сценариях, модель «семейство столбцов» хранит данные построчно, и обеспечивает высокую производительность, прежде всего, в оперативных сценариях, тогда как для запросов, требующих обхода большого объёма данных с агрегацией результатов, как правило, неэффективнаШаблон:SfnШаблон:Sfn.
Документоориентированная СУБД
Документоориентированные СУБД служат для хранения иерархических структур данных. Находят своё применение в системах управления содержимым, издательском деле, документальном поиске. Примеры СУБД данного типа — CouchDB, Couchbase, MongoDB, eXist, Berkeley DB XMLШаблон:Sfn.
Графовая СУБД
Графовые СУБД применяются для задач, в которых данные имеют большое количество связей, например, социальные сети, выявление мошенничества. Примеры: Neo4j, OrientDB, Шаблон:Iw, Blazegraph[3], InfiniteGraph, FlockDB, TitanШаблон:SfnШаблон:Sfn.
Так как рёбра графа материализованы (Шаблон:Lang-en), то есть, являются хранимыми, обход графа не требует дополнительных вычислений (как соединение в SQL), но для нахождения начальной вершины обхода требуется наличие индексов. Графовые СУБД как правило поддерживают ACID, а также поддерживают специализированные языки запросов, такие как Gremlin, Cypher, SPARQL, GraphQL.
UnQL
В июле 2011 компания Couchbase, разработчик CouchDB, Memcached и Membase, анонсировала создание нового SQL-подобного языка запросов — UnQL (Unstructured Data Query Language). Работы по созданию нового языка выполнили создатель SQLite Ричард Гипп (Шаблон:Lang-en) и основатель проекта CouchDB Дэмиен Кац (Шаблон:Lang-en). Разработка передана сообществу на правах общественного достояния[4][5][6]. Последний раз UnQL обновлялся в августе 2011 года[7], фактически проект не получил никакой поддержки.
Примечания
Литература
Ссылки
- Matthew Aslett, Updated database landscape graphic Шаблон:Wayback, November 2nd, 2012 (диаграмма)
Шаблон:Rq Шаблон:Нет полных библиографических описаний