I de sidste par år har NoSQL eller ikke-relationelle databaseværktøjer vundet meget popularitet med hensyn til at gemme enorme mængder data og let skalere dem. Der er debatter om, hvorvidt ikke-relationelle databaser vil erstatte relationsdatabaser i fremtiden. Med det stigende antal sociale data og andre ustrukturerede data er følgende nogle af de spørgsmål, der rejses om relationelle databaser.
Er relationelle databaser i stand til at håndtere big data?
Er relationelle databaser i stand til at udskalere en massiv mængden af data?
Er relationsdatabaser egnede til moderne tidsdata?
Inden du besvarer disse spørgsmål, skal du fortælle os nogle grundlæggende oplysninger om både relationelle og ikke-relationelle databaser.
Grundlæggende om relationelle og ikke-relationelle databaser
Relationelle databaser: Konceptet med relationel database blev udviklet i 1970'erne. Den vigtigste egenskab ved alle relationsdatabaser er dens understøttelse af ACID-egenskaber (Automitet, Konsistens, Isolation og Holdbarhed), som sikrer, at alle transaktioner behandles pålideligt.
Automatik: Hver transaktion er unik og sørger for, at hvis en logisk del af en transaktion fejler, bliver alt rollback, så data er uændrede.
Konsistens: Alle data skrevet til databasen er underlagt de definerede regler (begrænsninger, triggere osv.)
Isolation: Ændringer foretaget i en transaktion er ikke synlige for andre transaktioner, før de er begået.
Holdbarhed: Ændringer, der er foretaget i en transaktion, gemmes og er tilgængelige i databasen, selvom der er strømsvigt, eller databasen pludselig går offline.
Strengt struktureret: Objekterne i relationsdatabaserne er strengt strukturerede. Alle data i tabellen er gemt i rækker og kolonner. Hver kolonne har en datatype. Det er for det meste normaliseret. Structured Query Language (SQL) er velegnet til relationelle databaser til at gemme og hente data på en struktureret måde. Forespørgsler er almindelige engelske kommandoer. Der er altid et fast antal kolonner, selvom yderligere kolonner kan tilføjes senere. De fleste af tabellerne er relateret til hinanden med primære og fremmede nøgler, hvilket giver "Referentiel Integritet" blandt objekterne. De største leverandører er ORACLE, SQL Server, MySQL, PostgreSQL osv.
Ikke-relationelle databaser: Konceptet med ikke-relationelle databaser kom ind i billedet for at håndtere den hurtige vækst af ustrukturerede data og let skalere dem ud. Dette giver et fleksibelt skema, så der er ikke noget, der hedder "Referentiel integritet", som vi ser i relationelle databaser. Dataene er stærkt denormaliserede og kræver ikke JOINs mellem objekter. Dette slækker ACID-egenskaber for relationelle databaser og understøtter CAP (Consistency, Availability, and Partitioning). Men ud af disse tre er kun to garanteret på ethvert tidspunkt. Så i modsætning til ACID, vil den kun understøtte BASE (Basically Available Soft state, Eventuel konsistens). De første databaser, der er oprettet baseret på disse koncepter, er BigTable af Google, HBase af Yahoo, Cassandra af Facebook osv.
Kategorier af ikke-relationelle databaser: Ikke-relationelle databaser kan klassificeres i fire hovedkategorier, såsom nøgleværdidatabase, kolonnedatabase, dokumentdatabase og grafdatabase.
Nøgleværdidatabase: Dette er den enkleste form for NoSQL-database, hvor hver værdi er knyttet til den unikke nøgle.(ex Redis)
Kolonnedatabase: Denne database er i stand til at lagre og behandle en stor mængde data ved hjælp af en pointer, der peger på mange kolonner, der er fordelt over en klynge. (ex HBase)
Dokumentdatabase: Denne database kan indeholde mange nøgleværdidokumenter med mange indlejrede niveauer. Effektiv forespørgsel er mulig med denne database. Dokumenterne er gemt i JSON-format.(ex MongoDB)
Grafdatabase: I stedet for traditionelle rækker og kolonner bruger denne database noder og kanter til at repræsentere grafstrukturer og gemme data. (ex Neo4J)