Referenz: @storl2024 (KE6, NoSQL: Datenmodelle und Techniken; Teil 1.1)
⠀
Definition: NoSQL-Datenbank
Als NoSQL-Datenbank (kurz für Not only SQL) bezeichnen wir Datenbanken, die zur Speicherung und Verwaltung von Daten keine tabellenbasierten relationalen Datenbankstrukturen verwenden.
Charakteristisch für NoSQL-Datenbanken sind die folgenden Eigenschaften innerhalb der beiden Kategorien Datenmodell und Skalierbarkeit:
Datenmodell
Nicht-relational
Schemafreiheit (nicht immer gegeben!)
Skalierbarkeit
Verteilt und horizontal skalierbar
Einfache Replikation
Eventual Consistency und BASE (statt ACID)
Anmerkung
Keine Joins in NoSQL-Datenbanken?
In NoSQL-Datenbanken werden in der Regel keine Joins unterstützt.
Couchbase und MongoDB bieten mittlerweile eingeschränkte Join-Unterstützung an, diese Joins sind aber in aller Regel, insbesondere, wenn Daten verschiedener Nodes gejoint werden müssen, eine teure Operation.
Heterogenität der Query-API verschiedener NoSQL-Datenbanken
Die APIs der verschiedenen NoSQL-Datenbanken unterscheiden sich mitunter stark.
Eine mögliche Mitigation dieses Problems ist die Nutzung eines Objekt-NoSQL Mappers, der von der Query Sprache des Produktes abstrahiert:
Heterogenität der Query-API verschiedener NoSQL-Datenbanken:
// example: title, content from blogpost with id = 042// HBaseget 'blogposts', '042', { COLUMN => ['blogpost_data:title', 'blogpost_data:content'] } // Cassandra SELECT title, content FROM blogposts WHERE id = '042'; // MongoDB db.blogposts.find( { _id : '042' }, { title: 1, content: 1 } ) // Couchbase (without N1QL (pronounced as nickel))function (doc) { if (doc._id == '042') { emit(doc._id, [doc.title, doc.content]); } } // Couchbase with N1QL (pronounced as nickel)SELECT title, content from blogposts WHERE id = '042';