NoSQL

С Википедије, слободне енциклопедије

NoSQL (оригинално се односи на "non-SQL" или "нерелациони")[1] представља приступ дизајну база података, који се фокусира на пружање механизма за складиштење и преузимање података који су моделирани на начине који нису табеларне релације које се користе у релационим базама података. Уместо типичне табеларне структуре релационе базе података, NoSQL базе података чувају податке унутар једне структуре података. Будући да овај дизајн базе података без релација не захтева шему, пружа брзу скалабилност за управљање великим и обично неуређеним скуповима података.[2] NoSQL системи се понекад називају и "Not only SQL", како би се нагласило да могу подржавати језике упита сличне SQL-у или постојати уз SQL базе података у полиглота-персистантним архитектурама.[3]

Нерелационе базе података постоје од краја 1960-их година, али назив "NoSQL" је скован тек почетком 21. века, подстакнут потребама компанија које користе Wеб 2.0 технологије. [4] NoSQL базе података се све више користе у области великих података и реално-временских веб апликација.[5]

Мотивације за овај приступ укључују једноставност дизајна, лакше "хоризонтално" скалирање ка кластерима машина (што представља проблем за релационе базе података), прецизнију контролу доступности и смањење несклада између објектно-релационог модела података.[6] Структуре података које користе NoSQL базе података разликују се од оних које се подразумевано користе у релационим базама података, чиме се неке операције извршавају брже у NoSQL. Понекад се структуре података које користе NoSQL базе података сматрају "флексибилнијим" у поређењу са табелама релационих база података.[7]

Већина НоСQЛ база података не подржава праве АЦИД трансакције, иако су неки системи учинили да буду централни део својих дизајна. Уместо тога, већина НоСQЛ база података нуди концепт "евентуалне доследности", где се промене у бази података постепено шире ка свим чворовима "коначно" (обично у року од неколико милисекунди). Због тога упити за податке можда неће одмах вратити ажуриране податке или могу резултирати читањем података који нису тачни, што представља проблем познат као "застарело читање".[8] Додатно, неки NoSQL системи могу показивати губитке уписа и друге облике губитка података, стога ови системи уводе концепте попут унапредног бележења како би се избегао губитак података.

Историја[уреди | уреди извор]

Израз NoSQL је коришћен од стране Kарла Строззија 1998. године како би назвао своју лагану Strozzi NoSQL open-source релациону базу података која није користила стандардни језик упита (SQL), али је и даље била релациона.[9] Његов NoSQL RDBMS се разликује од општег концепта NoSQL база података који је настао око 2009. године. Строззи предлаже да би, будући да се тренутни NoSQL покрет "потпуно одваја од релационог модела, стога би га било прикладније назвати "NoREL",[10] што се односи на "није релациона".

Јохан Оскарссон, тада програмер у Last.fm, поново је увео израз NoSQL почетком 2009. године када је организовао догађај да се разговара о "отвореним дистрибуираним, нерелационим базама података".[11] Назив је покушао означити појаву све већег броја нерелационих, дистрибуираних складишта података, укључујући отворене копије Google-овог Bigtable/MapReduce и Amazon-овог DynamoDB.

Врсте и примери[уреди | уреди извор]

Постоје различити начини класификације NoSQL база података, са различитим категоријама и подкатегоријама, од којих се неке преклапају. У наставку следи преглед класификације према моделу података, са примерима:[12]

Тип базе података Значајни пример сваког типа базе података
Складиште докумената Azure Cosmos DB, ArangoDB, BaseX, Clusterpoint, Couchbase, CouchDB, DocumentDB, eXist-db, IBM Domino, MarkLogic, MongoDB, RavenDB, Qizx, RethinkDB, Elasticsearch, OrientDB
Графичка база података Azure Cosmos DB, AllegroGraph, ArangoDB, InfiniteGraph, Apache Giraph, MarkLogic, Neo4J, OrientDB, Virtuoso
Кључ–вредност кеш Apache Ignite, Couchbase, Coherence, eXtreme Scale, Hazelcast, nfinispan, Memcached, Redis, Velocity
Кључ–вредносно складиште Azure Cosmos DB, ArangoDB, Amazon DynamoDB, Aerospike, Couchbase, ScyllaDB
Кључ–вредносно складиште (доследност на крају) Azure Cosmos DB, Oracle NoSQL Database, Riak, Voldemort
Кључ–вредносно складиште (уређено) FoundationDB, InfinityDB, LMDB, MemcacheDB
Мултивредносна база података D3 Pick database, Extensible Storage Engine (ESE/NT), InfinityDB, InterSystems Caché, jBASE Pick database, mvBase Rocket Software, Northgate Information Solutions Reality (the original Pick/MV Database), OpenQM, Revelation Software's OpenInsight (Windows) and Advanced Revelation (DOS), UniData Rocket U2, UniVerse Rocket U2
База података са природним подржавањем више модела ArangoDB, Azure Cosmos DB, OrientDB, MarkLogic, Apache Ignite, Couchbase, FoundationDB, Oracle Database
Објектна база података Objectivity/DB, Perst, ZODB, db4o, GemStone/S,InterSystems Caché, JADE, ObjectDatabase++, ObjectDB, ObjectStore, ODABA, Realm, OpenLink Virtuoso, Versant Object Database
Троструко складиште (Трострука база података) AllegroGraph, MarkLogic, Ontotext-OWLIM, Oracle NoSQL database, Profium Sense, Virtuoso Universal Server
Складиште торки (База података са торкама) Apache River, GigaSpaces, T-arantool, TIBCO ActiveSpaces, OpenLink Virtuoso
Широколонско складиште Azure Cosmos DB, Amazon DynamoDB, Bigtable, Cassandra, Google Cloud Datastore, HBase, Hypertable, ScyllaDB

База података кључ–вредност[уреди | уреди извор]

Базе података кључ–вредност (КВ) користе асоцијативно поље (такође названо мапа или речник) као свој основни модел података. У овом моделу, подаци су представљени као колекција парова кључ–вредност, тако да се сваки могући кључ појави највише једном у колекцији.[13]

Модел кључ–вредност је један од најједноставнијих, али не и тривијалних модела података, а богатији модели података често су имплементирани као проширење овог модела. Модел кључ–вредност може бити проширен на модел са дискретним редоследом који одржава кључеве лексикографски поређане. Ово проширење је рачунарски снажно, јер може ефикасно дохватити селективне опсеге кључева.[14]

Базе података кључ–вредност могу користити моделе доследности од евентуалне доследности до сериализабилности. Неки системи подржавају уређивање кључева. Постоје различите имплементације хардвера, а неки корисници складиште податке у меморији (РАМ), док их други смештају на чврсте дискове (ССД) или ротирајуће дискове (познате и као хард дриве (ХДД)).

База података оријентисана на документе[уреди | уреди извор]

Централни концепт базе података оријентисане на документе је концепт "документа". Иако се детаљи ове дефиниције разликују међу базама података оријентисаним на документе, оне све претпостављају да документи инкапсулирају и кодирају податке (или информације) у неким стандардним форматима или енкодинзима. Употребљавани енкодинзи укључују XML, YAML i JSON, као и бинарни облици попут BSON-a. Документи се адресирају у бази података путем јединственог кључа који представља тај документ. Још једна дефинирајућа карактеристика базе података оријентисане на документе је АПИ или језик упита за дохватање докумената на основу њиховог садржаја.

Различите имплементације нуде различите начине организовања или груписања докумената:

  • Колекције,
  • Ознаке,
  • Невидљиви метаподаци,
  • Директорске хијерархије.

У поређењу са релационим базама података, колекције се могу сматрати аналогијом табелама, а документи аналогијом записима. Међутим, оне су различите - сваки запис у табели има исти след поља, док документи у колекцији могу имати потпуно различита поља.

Графичка база података[уреди | уреди извор]

Графичке базе података су дизајниране за податке чији односи добро могу бити представљени као граф који се састоји од елемената повезаних коначним бројем веза. Примери оваквих података обухватају друштвене односе, везе у јавном превозу, путне мапе, топологије мрежа, итд.

Перформансе[уреди | уреди извор]

Перформансе NoSQL база података обично се процењују помоћу метрике пропусности, која се мери као операције у секунди. Евалуација перформанси мора обратити пажњу на одговарајуће критеријуме као што су конфигурације у продукцији, параметри база података, очекивани обим података и радна оптерећења корисника у исто време.

Бен Скофилд је оценио различите категорије NoSQL база података на следећи начин:[15]

Модел података Перформансе Прилагодљивост Флексибилност Сложеност Функционалност
Складиште оријентисано по колонама Високо Високо Умерено Ниско Минимално
Складиште оријентисано према документима Високо Променљиво (високо) Високо Ниско Променљиво (ниско)
Графичка база података Променљиво Променљиво Високо Високо Теорија графова
Кључ–вредносно складиште Високо Високо Високо Нема Променљивo (нема)
Релациона база података Променљиво Променљиво Ниско Умерено Релационе алгебре

Поређење перформанси и скалабилности најчешће се врши коришћењем YCSB бенчмарка.

Руковање релационим подацима[уреди | уреди извор]

Пошто већина NoSQL база података нема могућност за спајање у упитима, шема базе података се обично мора дизајнирати на другачији начин. Постоје три главне технике за руковање релационим подацима у NoSQL бази података.

Вишеструки упити[уреди | уреди извор]

Уместо да се сви подаци добију једним упитом, уобичајено је извршити неколико упита како би се добили жељени подаци. NoSQL упити често су бржи од традиционалних SQL упита, па је трошак додатних упита можда прихватљив. Ако би било потребно извршити прекомерни број упита, један од преостала два приступа био би погоднији.

Кеширање, репликација и неденормализовани подаци[уреди | уреди извор]

Уместо само чувања страних кључева, уобичајено је чувати стварне вредности страних кључева заједно са подацима модела. На пример, сваки коментар на блогу може укључивати корисничко име поред идентификатора корисника, чиме се омогућава лако приступање корисничком имену без додатног претраживања. Међутим, када се корисничко име промени, сада ће бити потребно променити га на много места у бази података. Овај приступ боље функционише када су читања много чешћа од писања.[16]

Угњеждени подаци[уреди | уреди извор]

Са документ базама података попут MongoDB-a, уобичајено је смештати више података у мањи број колекција. На пример, у апликацији за блоговање, може се одлучити да се коментари чувају унутар документа блог поста, тако да се једним дохватањем добију сви коментари. Дакле, у овом приступу један документ садржи све податке потребне за одређени задатак.

Референце[уреди | уреди извор]

  1. ^ „NoSQL Databases List by Hosting Data - Updated 2023”. Hosting Data (на језику: енглески). 2023-11-17. Приступљено 2023-12-09. 
  2. ^ „Topics | IBM”. www.ibm.com (на језику: енглески). Приступљено 2023-12-09. 
  3. ^ 3. New Requirements, “Not only SQL” and the Cloud, De Gruyter, 2015-10-16, стр. 33—40, Приступљено 2023-12-09 
  4. ^ Back Matter, Princeton University Press, стр. 647—648, Приступљено 2023-12-09 
  5. ^ Fellner, Andrew; Fischer, Steffen (2013-11-08). „Energy Efficient Hydraulic Systems for Large Engines”. Day 1 Fri, November 08, 2013. SNAME. doi:10.5957/smc-2013-p22. 
  6. ^ Sadalage, Pramod J.; Fowler, Martin (2013). NoSQL distilled: a brief guide to the emerging world of polyglot persistence. Always learning. Upper Saddle River, NJ Munich: Addison-Wesley. ISBN 978-0-321-82662-6. 
  7. ^ Sivasubramanian, Swaminathan (2012-05-20). „Amazon dynamoDB”. Proceedings of the 2012 ACM SIGMOD International Conference on Management of Data. New York, NY, USA: ACM. doi:10.1145/2213836.2213945. 
  8. ^ Fowler, Dennis Houston, (15 March 1924–20 April 2015), HM Diplomatic Service, retired, Oxford University Press, 2007-12-01, Приступљено 2023-12-09 
  9. ^ Saeedi, Alieh; Nentwig, Markus; Peukert, Eric; Rahm, Erhard (2018-10-31). „Scalable Matching and Clustering of Entities with FAMER”. Complex Systems Informatics and Modeling Quarterly (16): 61—83. ISSN 2255-9922. doi:10.7250/csimq.2018-16.04. 
  10. ^ NoSQL Database Phenomenon, IGI Global, 2018, стр. 34—93, Приступљено 2023-12-09 
  11. ^ „Fig. 2. Examples of color anomalies on the ORO images, time points of the survey: a - March 13, 2010; B - November 20, 2009; on July 12, 2010; d - May 3, 2012 (TKO Dmitrovsky test site, images from Google Earth).”. dx.doi.org. Приступљено 2023-12-09. 
  12. ^ Celko, Joe (2014), Graph Databases, Elsevier, стр. 27—46, Приступљено 2023-12-09 
  13. ^ Haeusler, Martin (2016). „Scalable Versioning for Key-Value Stores”. Proceedings of the 5th International Conference on Data Management Technologies and Applications. SCITEPRESS - Science and Technology Publications. doi:10.5220/0005938700790086. 
  14. ^ Katsov, Ilya (2022-10-17). „Building Next Best Action Engines for B2C and B2B Use Cases”. Proceedings of the 31st ACM International Conference on Information & Knowledge Management. New York, NY, USA: ACM. doi:10.1145/3511808.3557511. 
  15. ^ Integration of Relational and NoSQL Databases, IGI Global, 2018, стр. 239—281, Приступљено 2023-12-09 
  16. ^ Bromham, Lindell; Cardillo, Marcel (2019-05-02), How did evolution get started?, Oxford University Press, ISBN 978-0-19-960871-3, Приступљено 2023-12-09