NoSQL

Материал из Википедии — свободной энциклопедии
Это старая версия этой страницы, сохранённая 217.8.45.198 (обсуждение) в 10:03, 21 января 2022 (не знаю). Она может серьёзно отличаться от текущей версии.
Перейти к навигации Перейти к поиску


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

Традиционные СУБД ориентируются на требования 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[2]. Некоторые СУБД, например, Riak, позволяют настраивать требуемые характеристики доступности-согласованности даже для отдельных запросов путём задания количества узлов, необходимых для подтверждения успеха транзакции.[3]

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

  • Применение различных типов хранилищ[4].
  • Возможность разработки базы данных без задания схемы[4][5].
  • Линейная масштабируемость (добавление процессоров увеличивает производительность)[4].
  • Инновационность: «не только SQL» открывает много возможностей для хранения и обработки данных[4].

Типы систем

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

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

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

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

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

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

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

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

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

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

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

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

Так как рёбра графа материализованы (англ. 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). Разработка передана сообществу на правах общественного достояния[9][10][11]. Последний раз UnQL обновлялся в августе 2011 года[12], фактически проект не получил никакой поддержки.

Примечания

  1. 1 2 3 Vaish, 2013, What NoSQL is and what it is not.
  2. 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.
  3. Zachary Kessin. Building Web Applications with Erlang. — O’Reilly Media, Inc., 2012. — P. 13. — 156 p. — ISBN 978-1-4493-0996-1.
  4. 1 2 3 4 5 6 7 8 9 McCreary, Kelly, 2013, 1.1. What is NoSQL?.
  5. 1 2 Vaish, 2013, Why NoSQL?.
  6. 1 2 3 4 Curé, Blin, 2014.
  7. McCreary, Kelly, 2013, 4.3. Column family (Bigtable) stores.
  8. Blazegraph (Formerly Bigdata), w3c
  9. UnQL Query Language Unveiled by Couchbase and SQLite
  10. Welcome to the UnQL Specification home
  11. Создатели CouchDB и SQLite представили UnQL, аналог SQL для систем NoSQL, новость на OpenNet
  12. UnQL: Timeline. unql.sqlite.org. Дата обращения: 18 октября 2021.

Литература

  • Мартин Фаулер, Прамодкумар Дж. Садаладж. NoSQL: новая методология разработки нереляционных баз данных = NoSQL Distilled. — М.: «Вильямс», 2013. — 192 с. — ISBN 978-5-8459-1829-1.
  • Леонид Черняк. Смутное время СУБД // Открытые системы. — 2012. — № 2.
  • Dan McCreary, Ann Kelly. Making Sense of NoSQL: A guide for managers and the rest of us. — Manning Publications, 2013. — 312 p. — ISBN 978-1-61729-107-4.
  • Olivier Curé, Guillaume Blin. Chapter 2. Database Management Systems // RDF Database Systems: Triples Storage and SPARQL Query Processing. — Elsevier Science, 2014. — 256 p. — ISBN 978-0-12-800470-8.
  • Shashank Tiwari. Professional NoSQL. — John Wiley & Sons Inc, 2011. — 384 p. — ISBN 9780470942246.

Ссылки