# NoSQL

**NoSQL** (*ноу-эс-кью-эл*, ад англ.: non SQL — *не-SQL*) — гэта падыход да праектавання баз даных, які прадастаўляе механізмы для захоўвання і пошуку даных, адрозныя тых, што выкарыстоўваюцца ў рэляцыйных базах даных. Замест тыповай таблічнай структуры рэляцыйнай базы даных NoSQL-сістэмы змяшчаюць даныя ў адной структуры, якая не патрабуе яўнага апісання схемы базы даных і такім чынам дазваляе неструктураваныя наборы даных. Сістэмы NoSQL таксама часам называюць *Not only SQL* («не толькі SQL»), каб падкрэсліць, што яны могуць падтрымліваць мовы запытаў, падобныя на SQL.

Нерэляцыйныя базы даных існуюць з канца 1960-х гадоў, але назва «NoSQL» была створана толькі ў пачатку 21-га стагоддзя з развіццём тэхналогій Web 2.0. Базы даных NoSQL таксама выкарыстоўваюцца для апрацоўкі вялікіх даных і ў вэб-праграмах у рэжыме рэальнага часу.

Структуры даных, якія выкарыстоўваюцца базамі даных NoSQL (напрыклад, пара ключ-значэнне, графы або дакументы), адрозніваюцца ад структур рэляцыйных баз даных, што робіць некаторыя аперацыі больш хуткімі ў NoSQL. Часам структуры даных NoSQL таксама разглядаюцца як «больш гнуткія», чым табліцы рэляцыйных баз даных.

## Гісторыя

Тэрмін *NoSQL* быў выкарыстаны Карла Строцы ў 1998 годзе, каб назваць створаную ім базу даных Strozzi NoSQL, якая не выкарыстоўвала SQL, але па-ранейшаму была рэляцыйнай. Яго разуменне тэрміна адрозніваецца ад канцэпцыі NoSQL, якая распаўсюдзілася пасля 2009 года. Строцы мяркуе, што, паколькі сучасны рух NoSQL "цалкам адыходзіць ад рэляцыйнай мадэлі, яго варта было б больш правільна называць «NoREL» , маючы на ўвазе «not relational» — «нерэляцыйны».

## Віды і прыклады

Існуюць розныя класіфікацыі баз даных NoSQL. Далей прыводзяцца прыклады суадносна з выкарыстанымі мадэлямі даных:

| Від | Прыклады |
| --- | --- |
| Кэш ключ-значэнне | Apache Ignite, Couchbase, Coherence, eXtreme Scale, Hazelcast, Infinispan, Memcached, Redis, Velocity |
| Сховішча ключ-значэнне | Azure Cosmos DB, ArangoDB, Amazon DynamoDB, Aerospike, Couchbase, ScyllaDB, Oracle NoSQL Database, FoundationDB, InfinityDB, LMDB, MemcacheDB |
| Сховішча картэжаў | Apache River, GigaSpaces, Tarantool, TIBCO ActiveSpaces, OpenLink Virtuoso |
| Сховішча дакументаў | Azure Cosmos DB, ArangoDB, BaseX, Clusterpoint, Couchbase, CouchDB, DocumentDB, eXist-db, IBM Domino, MarkLogic, MongoDB, RavenDB, Qizx, RethinkDB, Elasticsearch, OrientDB |
| Шырокакалоннае сховішча | Azure Cosmos DB, Amazon DynamoDB, Bigtable, Cassandra, Google Cloud Datastore, HBase, Hypertable, ScyllaDB |
| Графавая база даных | Azure Cosmos DB, AllegroGraph, ArangoDB, InfiniteGraph, Apache Giraph, MarkLogic, Neo4J, OrientDB, Virtuoso |

## Апрацоўка рэляцыйных даных

Паколькі ў большасці баз даных NoSQL адсутнічае магчымасць аб’яднання запытаў, схему базы даных звычайна трэба распрацоўваць па-іншаму. Ёсць тры асноўныя метады апрацоўкі рэляцыйных даных у базах даных NoSQL.

### Шматразовыя запыты

Замест таго, каб атрымліваць усе даныя з дапамогай аднаго запыту, выконваецца некалькі запытаў. Запыты ў NoSQL часта выконваюцца хутчэй, чым запыты ў рэляцыйных базах, таму кошт дадатковых запытаў можа быць прымальным.

### Ненармалізаваныя даныя

Замест таго, каб захоўваць толькі знешнія ключы (англ.: foreign keys), захоўваюць фактычныя знешнія значэнні разам з данымі мадэлі. Напрыклад, запіс аб каментары ў блогу можа ўключаць імя карыстальніка, што дазваляе пазбегнуць паўторнага пошуку па ідэнтыфікатары карыстальніка. Аднак калі імя карыстальніка змяняецца, яго трэба будзе змяніць у многіх месцах базы даных.

### Укладзеныя даныя

З дакументнымі базамі даных, такімі як MongoDB, можна змясціць больш даных у меншай колькасці калекцый. Напрыклад, у праграме для вядзення блога можна выбраць захаванне каментарыяў у дакуменце паведамлення ў блогу, каб пры аднаразовым пошуку можна было атрымаць усе каментарыі. Такім чынам, пры такім падыходзе адзіны дакумент змяшчае ўсе даныя, неабходныя для канкрэтнай задачы.

## Гл. таксама

* Аб’ектна-рэляцыйная база даных

## Крыніцы

## Спасылкі

* *Strauch*. NoSQL whitepaper **(нявызн.)**. Stuttgart:  Hochschule der Medien.
* *Edlich*. NoSQL database List **(нявызн.)**(недаступная спасылка). Архівавана з першакрыніцы 26 снежня 2018. Праверана 23 кастрычніка 2023.
* *Neubauer*. Graph Databases, NOSQL and Neo4j **(нявызн.)** (2010).
* *Bushik*. A vendor-independent comparison of NoSQL databases: Cassandra, HBase, MongoDB, Riak **(нявызн.)**.  NetworkWorld (2012).
* *Zicari*. NoSQL Data Stores – Articles, Papers, Presentations **(нявызн.)**. *odbms.org* (2014).