Базата данни представлява колекция от данни. Организацията и подредбата на данните може да следва определен модел. Според модела може да се опишат два типа бази данни – релационни и нерелационни.
Най-известният и използван до момента тип бази данни е релационният (SQL бази данни). Другият тип бази данни, използващ нерелационен модел за данните, се нарича NoSQL (non SQL / Not only SQL).
Идеята за релационен модел на базите данни се появява през 1970г. През последвалите години, до ден днешен, SQL базите данни са основният начин за съхранение на данни. Известността им се увеличава бързо след 1990г. с появата на уеб приложенията и решенията с отворен код като MySQL (1995г.), PostgreSQL (1996г.) и SQLite (2000г.).
NoSQL базите данни се появяват в началото на 21ви век. Създадени са от нуждата за управление на големи обеми информация в модерните уеб и мобилни приложения. Появят се решения като MongoDB (2009г.), Redis (2009г.) и други. NoSQL базите данни се използват при работа с big-data (огромен обем данни) и приложенията, работещи в реално време (real-time web applications).
Релационни бази данни (SQL)
Релационните бази, срещани и като „SQL бази данни“, заради езика за запитвания SQL, съхраняват данните по предварително структуриран начин – в таблици, подредени в редове (записи) и колони. Между отделните данни и таблици може да се създават връзки (релации). Таблиците и връзките между тях образуват структура, която може да се представи като схема.
Модел за съхранение на данните
Отделните единици информация се съдържат в единични полета, подредени в редове в таблица.
Допълнителна информация за данните се записва чрез колоните, в допълнителни полета към реда/записа. Например записът за статия в WordPress базата данни, в таблицата posts, съдържа уникален номер на статията (ID), който не се променя. Всяка следваща колона съдържа допълнителна информация, която може да се променя като: съдържание (post_content), име на публикация (post_title), статус (post_status), автор и други. Други данни, свързани с дадена статия, но различни по смисъл, може да се съхраняват в отделни таблици. Например таблицата comments, в която се съхраняват коментарите към дадената статия. Връзката (релацията) между двете таблици posts и comments използва уникалния номер на публикацията. Когато статията и коментарите й трябва да се покажат на една страница в сайта, чрез SQL езика се създава запитване към базата данни. SQL запитването се приема и изпълнява от контролера на базата (database engine), който намира и съединява данните от двете таблици и ги връща като резултат.
Схемата на данните е фиксирана и с предварително зададени спецификации. За да може да се добавя информация в релационната база данни, първо в нея трябва да се дефинира схемата, таблиците, полетата и типа им, ключовете, връзките, тригери и други. Промени на вече създадена база данни са възможни, но когато те са големи, това е сложен процес, който може да наложи и временна недостъпност до данните.
Използване
SQL базите се използват масово – при малки обеми информация например за уеб сайт с две страници, до големи уеб или мобилни приложения, блогове, онлайн магазини и други. Най-известните готови системи за управление на съдържанието (CMS) поддържат и използват релационни бази данни – WordPress, Joomla, Drupal, Magento и други. По-малко са тези обаче, които поддържат NoSQL бази данни (като Drupal).
Разрастване (мащабируемост)
Вертикално. Базата данни се намира на един сървър. За да се разшири, може да се увеличава мощта и ресурсите на този сървър. Възможно е SQL базата данни да се разпростре на множество сървъри, но имплементацията обикновено е сложна, ресурсоемка и времеемка. И тъй като тези бази не предлагат подобна функционалност по естествен начин, допълнителна разработка ще е нужна, за да може различните хардуерни точки да имитират работата на една база, на един сървър. Допълнителни програмни разработки ще са нужни за управление на логиката и дистрибутирането на заявките за данните между отделните точки, както и за извличането и обединяването на данни от различните сървъри.
Системи за управление на бази данни (DBMS)
Поддръжката на дадения модел за съхранение, структурата и управлението на данните, се извършва от система за управление на бази данни (СУБД), на английски: Database Management System (DBMS). Системите, които управляват релационни бази данни се наричат още RDBMS – системи за управление на релационни бази данни.
Примери за RDBMS системи са: MySQL, PostgreSQL, SQLite, Microsoft SQL Server, Oracle.
За запитвания и манипулация на данните в релационните бази данни (най-често) се използва езикът SQL (Structured Query Language). Файловете, които съдържат SQL код, са с разширение .sql.
NoSQL бази данни
NoSQL базите данни са общо наименование на различни технологии за бази данни, създадени за нуждите на модерните приложения и огромното количество информация, с което те работят. С NoSQL базите данни се решават различни SQL ограничения за:
- лесна мащабируемост върху клъстери от сървъри (хоризонтално мащабиране);
- поддръжка на различни типове структури от данни;
- използване при разработка с гъвкави методологии (agile development).
Някои NoSQL бази данни може да не отговарят напълно на ACID (Atomicity, Consistency, Isolation, Durability) модела за транзакции. ACID моделът е колекция от свойства на транзакциите, чрез които може да се гарантира цялост, завършеност, изолация и устойчивост на транзакциите в базата данни.
Някои NoSQL бази също така може да не поддържат join операциите, използвани в релационните бази данни. Вместо тях, за обработката на свързани данни, се използват различни подходи като заместители: няколко заявки, вместо една; кеширане, репликиране, де-нормализиране и вместване (nesting) на данни.
Модел за съхранение на данните
Нерелационните бази (NoSQL) не използват схеми и таблици за данните. Първият запис от данните в примера за WordPress базата и таблицата posts, би изглеждал по подобен начин в NoSQL база данни:
{
ID: 1,
title: "Hello Site!",
content: "<p>Welcome to WordPress...",
status: "publish",
type: "post"
}
Например информацията в MongoDB NoSQL базата данни се съхранява в JSON-подобни „документи“. Данните (наричани документи) в документната база данни може да се организират в колекция, което е нещо като SQL таблицата. Моделът на данните е динамичен и е възможно да се добавят нови полета с данни, без това да налага преработка на схемата/структурата на базата данни.
Има различни типове NoSQL бази данни, основавайки се на използвания модел за съхранение на данните:
- Документни бази
Тези бази работят с идеята за „документ“. Дадена информация и свързаните с нея допълнителни данни се съхраняват в документ в JSON, XML или друг подходящ формат. Примери: MongoDB, Apache CouchDB, ArangoDB, BaseX, Cosmos DB и други. - Ключ-стойност бази/хранилища
Данните в тези бази данни са организирани в записи тип „ключ-стойност“. Много приличат на записите в таблицата на релационна база, но съдържат единствено тези две колони „ключ“ и „стойност“. В колоната „стойност“ може да се записват различни и сложни структури от данни. Примери: ArangoDB, Berkeley DB, Couchbase, Dynamo, InfinityDB, Oracle NoSQL Database, OrientDB и други.
Някои NoSQL бази данни от този тип (ключ-стойност), съхраняват данните в паметта на системата. Поради това тези бази са изключително бързи в достъпа до данните и често се използват за кеширане и ускоряване на уеб приложения – примери: Memcached, Redis. - Колонни бази
Тези бази се базират на организация на данните във фамилии от колони. Отново се използва понятието за „ключ“, но той може да сочи определена „фамилия“ колони в базата. Примери: Cassandra, HBase и други. - Граф бази
Тези бази са подобни на документните, но поддържат връзки между отделните обекти. В тази база се използва идеята за „обект“ от данни, наричан възел (node), който може да има свойства (properties) и връзки (edges) с други възли. Примери за такива бази: Infinite Graph, InfoGrid.
Използване
Основно NoSQL базите се използват за приложения, които работят с огромни обеми информация и нуждата от високоскоростна достъпност и постоянно и автоматично разширяване. Такива приложения може да са масивни уеб приложения и приложения за мобилни устройства, които обслужват милиони потребители. Възникването на нуждата от такъв тип бази данни се приписва на постоянно нарастващите обеми от данни в дигиталния свят и развитието на Уеб 2.0. Съществуват NoSQL платени разработки, както и такива с отворен код като: MongoDB, CouchDB, Druid, Neo4j Community Edition, Redis, Memcache и други.
Няколко готови приложения, които поддържат MongoDB база данни: Drupal (PHP), Express.js (Node.js), ApostropheCMS (Node.js), KeystoneJS (Node.js), FlintCMS (Node.js) и други.
Разрастване (мащабируемост)
Хоризонтално. NoSQL базите са с вградена в архитектурата способност за автоматично разпределяне на базата данни върху множество сървъри, cloud инстанции и други. Дистрибутираната NoSQL база данни може да поеме тежките изисквания за обработка и обновяване на големи обеми информация в реално време, с висока оперативна ефективност.