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
 
// HBase
get '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';