NoSQL

Материал из Википедии — свободной энциклопедии
Перейти к навигацииПерейти к поиску

NoSQL (отангл. not only SQL —не только SQL) — обозначение широкого класса разнородныхсистем управления базами данных (СУБД), появившихся в конце 2000-х — начале 2010-х годов и существенно отличающихся от традиционныхреляционных СУБД с доступом к данным средствами языкаSQL. Применяется к системам, в которых делается попытка решить проблемымасштабируемости идоступности за счёт полного или частичного отказа от требованийатомарности исогласованности данных[1].

Содержание

Происхождение

[править |править код]

История названия

[править |править код]

Изначально слово NoSQL являлосьакронимом из двух слов английского языка: No («Не») и SQL (сокращение отангл. Structured Query Language — «структурированный язык запросов»), что даёт термину смысл «отрицающий SQL». Возможно, что первые, кто стал употреблять этот термин, хотели сказать «No RDBMS» («нереляционная СУБД») или «no relational» («не реляционный»), но NoSQL звучало лучше и в итоге прижилось (в качестве альтернативы предлагалось также NonRel). Позднее для NoSQL было придумано объяснение «Not Only SQL» («не только SQL»). NoSQL сталобщим термином для различных баз данных и хранилищ, но он не обозначает какую-либо одну конкретную технологию или продукт[2].

Развитие идеи

[править |править код]

Нереляционные системы использовались на всём протяжении истории современной вычислительной техники, и даже доминировали во времена первыхмейнфреймов, пока не были вытеснены реляционными СУБД, сохранив применение в специализированных системах (например, иерархическихслужбах каталогов). Распространение нереляционных СУБД в 2000-е годы произошло из-за необходимости создания параллельных распределённых систем для высокомасштабируемых интернет-приложений, таких какпоисковые системы[2]. В начале 2000-х годовGoogle построил высокомасштабируемую поисковую систему и приложения:GMail,Google Maps,Google Earth, применивраспределённую файловую систему, распределённую систему координации и техникуMapReduce. Позднее была создана масштабируемая СУБД категории «семейство столбцов». Публикация компанией Google описаний этих технологий привела к всплеску интереса среди разработчиковоткрытого программного обеспечения, в результате чего был созданHadoop и запущены связанные с ним проекты, призванные создать подобные Google технологии. В 2007 году примеру Google последовалAmazon.com, опубликовав статьи о высокодоступной базе данныхAmazon DynamoDB[3].

Поддержка гигантов индустрии менее чем за пять лет привела к широкому распространению технологий NoSQL (и подобных) для управления «большими данными», а к направлению присоединились другие участники, в том числеIBM,Facebook,Netflix,eBay,Hulu,Yahoo!, со своимипроприетарными и открытыми решениями[3].

Основные черты

[править |править код]

Традиционные СУБД ориентируются на требованияACID к транзакционной системе: атомарность (англ. atomicity), согласованность (англ. consistency), изолированность (англ. isolation), долговечность (англ. durability), тогда как в NoSQL вместо ACID может рассматриваться набор свойств BASE[1]:

  • базовая доступность (англ. basic availability) — каждый запрос гарантированно завершается (успешно или безуспешно).
  • гибкое состояние (англ. soft state) — состояние системы может изменяться со временем, даже без ввода новых данных, для достижения согласования данных.
  • согласованность в конечном счёте (англ. eventual consistency) — данные могут быть некоторое время рассогласованы, но приходят к согласованию через некоторое время.

Термин «BASE» был предложен Эриком Брюером, авторомтеоремы CAP, согласно которой, в распределённых вычислениях можно обеспечить только два из трёх свойств: согласованность данных, доступность или устойчивость к разделению[1].

Разумеется, системы на основе BASE не могут использоваться в любых приложениях: для функционирования биржевых и банковских систем использование транзакций является необходимостью. В то же время свойства ACID, какими бы желанными они ни были, практически невозможно обеспечить в системах с многомиллионной веб-аудиторией, вродеamazon.com[1]. Таким образом, проектировщики NoSQL-систем жертвуют согласованностью данных ради достижения двух других свойств из теоремы CAP[4]. Некоторые СУБД, например,Riak, позволяют настраивать требуемые характеристики доступности-согласованности даже для отдельных запросов путём задания количества узлов, необходимых для подтверждения успеха транзакции.[5]

Решения NoSQL отличаются не только проектированием с учётом масштабирования. Другими характерными чертами NoSQL-решений являются[6][7]:

  • Применение различных типов хранилищ[6].
  • Возможность разработки базы данных без заданиясхемы[6][7].
  • Линейная масштабируемость (добавление процессоров увеличивает производительность)[6].

Типы систем

[править |править код]

Описаниесхемы данных в случае использования NoSQL-решений может осуществляться через использование различных структур данных:хеш-таблиц,деревьев и других.

В зависимости отмодели данных и подходов краспределённости ирепликации в NoSQL-движении выделяются четыре основных типа систем: «ключ — значение» (англ. key-value store), «семейство столбцов» (column-family store), документоориентированные (document store), графовые.

Ключ — значение

[править |править код]

Модель «ключ — значение» является простейшим вариантом, использующим ключ для доступа к значению. Такие системы используются для хранения изображений, создания специализированных файловых систем, в качествекэшей для объектов, а также в системах, спроектированных с прицелом намасштабируемость. Примеры таких хранилищ —Berkeley DB,MemcacheDB[англ.],Redis,Riak,Amazon DynamoDB[6].

Семейство столбцов

[править |править код]
Запрос «Семейство столбцов»[d] перенаправляется сюда. На эту тему нужносоздать отдельную статью.

Другой тип систем — «семейство столбцов», прародитель этого типа — система GoogleBigTable. В таких системах данные хранятся в видеразреженной матрицы, строки и столбцы которой используются как ключи. Типичным применением этого типа СУБД являетсявеб-индексирование, а также задачи, связанные сбольшими данными, с пониженными требованиями ксогласованности. Примерами СУБД данного типа являются: ApacheHBase,Apache Cassandra,ScyllaDB[англ.],Apache Accumulo[англ.],Hypertable[англ.][6][8].

Системы типа «семейство столбцов» и документно-ориентированные системы имеют близкие сценарии использования: системы управления содержимым, блоги, регистрация событий. Использованиевременных меток позволяет использовать этот вид систем для организации счётчиков, а также регистрации и обработки различных данных, связанных со временем[8].

В отличие отстолбцового хранения, применяемого в некоторыхреляционных СУБД, хранящих данные по столбцам в сжатом виде для эффективности вOLAP-сценариях, модель «семейство столбцов» хранит данные построчно, и обеспечивает высокую производительность, прежде всего, воперативных сценариях, тогда как для запросов, требующих обхода большого объёма данных с агрегацией результатов, как правило, неэффективна[8][9].

Документоориентированная СУБД

[править |править код]

Документоориентированные СУБД служат для хранения иерархических структур данных. Находят своё применение всистемах управления содержимым, издательском деле,документальном поиске. Примеры СУБД данного типа —CouchDB,Couchbase,MongoDB,eXist, Berkeley DB XML[6].

Графовая СУБД

[править |править код]

Графовые СУБД применяются для задач, в которых данные имеют большое количество связей, например,социальные сети, выявление мошенничества. Примеры:Neo4j,OrientDB,AllegroGraph[англ.],Blazegraph[10],InfiniteGraph,FlockDB,Titan[6][8].

Так как рёбра графа материализованы (англ. materialized), то есть, являются хранимыми, обход графа не требует дополнительных вычислений (каксоединение в SQL), но для нахождения начальной вершины обхода требуется наличие индексов. Графовые СУБД как правило поддерживаютACID, а также поддерживают специализированные языки запросов, такие какGremlin,Cypher,SPARQL,GraphQL.

UnQL

[править |править код]

В июле 2011 компания Couchbase, разработчикCouchDB,Memcached иMembase, анонсировала создание новогоSQL-подобногоязыка запросов —UnQL (Unstructured Data Query Language). Работы по созданию нового языка выполнили создательSQLite Ричард Гипп (англ. Richard Hipp) и основатель проекта CouchDB Дэмиен Кац (англ. Damien Katz). Разработка передана сообществу на правахобщественного достояния[11][12][13]. Последний раз UnQL обновлялся в августе 2011 года[14], фактически проект не получил никакой поддержки.

Примечания

[править |править код]
  1. 1234Vaish, 2013, What NoSQL is and what it is not.
  2. 12Tiwari, 2011, Chapter 1: NoSQL: What It Is and Why You Need it > Definition and Introduction.
  3. 12Tiwari, 2011, pp. 4—6.
  4. Brewer, Eric A. A Certain Freedom: Thoughts on the CAP Theorem (англ.) // Proceeding of the IXXX ACM SIGACT-SIGOPS symposium on Principles of distributed computing. — New York:ACM,2010. —Iss. 29,no. 1. —P. 335—336. —ISBN 978-1-60558-888-9. —doi:10.1145/1835698.1835701.
  5. Zachary Kessin. Building Web Applications with Erlang. — O’Reilly Media, Inc., 2012. — P. 13. — 156 p. —ISBN 978-1-4493-0996-1.
  6. 12345678McCreary, Kelly, 2013, 1.1. What is NoSQL?.
  7. 12Vaish, 2013, Why NoSQL?.
  8. 1234Curé, Blin, 2014.
  9. McCreary, Kelly, 2013, 4.3. Column family (Bigtable) stores.
  10. Blazegraph (Formerly Bigdata)Архивная копия от 13 июня 2015 наWayback Machine, w3c
  11. UnQL Query Language Unveiled by Couchbase and SQLite . Дата обращения: 7 августа 2011. Архивировано 25 сентября 2011 года.
  12. Welcome to the UnQL Specification home . Дата обращения: 7 августа 2011. Архивировано 25 сентября 2011 года.
  13. Создатели CouchDB и SQLite представили UnQL, аналог SQL для систем NoSQLАрхивная копия от 14 сентября 2011 наWayback Machine, новость наOpenNet
  14. UnQL: Timeline . unql.sqlite.org. Дата обращения: 18 октября 2021. Архивировано 18 октября 2021 года.

Литература

[править |править код]

Ссылки

[править |править код]
Перейти к шаблону «Базы данных»
Типы
Концепции
Объекты
Ключи
Компоненты
SQL
DML
DDL
DCL
TCL
У этой статьиесть 2 проблемы, помогите их исправить:
Информация должна бытьпроверяема, иначе она может быть удалена. Вы можетеотредактировать статью, добавив ссылки наавторитетные источники в видесносок.(20 сентября 2010)
Достоверность этой статьипоставлена под сомнение.
Необходимо проверить точностьфактов идостоверность сведений, изложенных в этой статье. Соответствующую дискуссию можно найти настранице обсуждения.(5 июня 2011)
Пожалуйста, после исправления проблемы удалите соответствующий шаблон. Узнать, как это сделать, можно насправочной странице.
В сносках к статьенайдены неработоспособные вики-ссылки.
Исправьте короткие примечания, установленные через шаблон{{sfn}} или его аналоги, в соответствии с инструкцией к шаблону, или добавьте недостающие публикации в раздел источников. Список сносок: Vaish, 2013(15 марта 2020)
Источник —https://ru.wikipedia.org/w/index.php?title=NoSQL&oldid=148311045
Категория:
Скрытые категории: