RethinkDB – Big Data in Echtzeit


RethinkDB Logo

RethinkDB ist eine skalierbare Open-Source Datenbank. Es handelt sich um eine NoSQL Datenbank, die ihre Daten im JSON Format speichert und für Echtzeit Web-Applikationen optimiert ist. Sie stellt mit der Rethink Query Language, kurz ReQL, ein flexibles und mächtiges Werkzeug zum verwalten der Daten zur Verfügung.

Während die meisten gängigen Datenbanken ständig nach neuen Daten abgefragt werden müssen, kann RethinkDB neue Daten über die Verbindung direkt zum Client pushen.

Ein großer Unterschied von ReQL etwa zu SQL Queries ist, dass ReQL nicht auf grammatikalische Queries setzt. Beispiel:

MySQL: SELECT id, name FROM db.table WHERE db.table.field=1 LIMIT 5,5;

Sieht in ReQL wie folgt aus,

ReQL: r.db(db) .table(table) .filter({field:1}) .pluck([id,name]) .skip(5) .limit(5)

So ist bei ReQL direkt ersichtlich, in welcher Reihenfolge welche Aktionen in der Datenbank durchgeführt werden.

  1. Datenbank db auswählen
  2. Tabelle table auswählen und Dokumente auslesen
  3. Auf Dokumente einschränken die im Feld field den Wert 1 haben.
  4. Dokumente auf Felder id und name reduzieren
  5. Die ersten 5 Dokumente verwerfen
  6. Nur die ersten 5 Dokumente behalten

Die Reihenfolge der Operationen ist hier nicht begrenzt oder limitiert, sodass sich weitreichende Optimierungsmöglichkeiten ergeben.
Durchsucht man sehr viele oder sehr große Datensätze, könnte es z. B. hilfreich sein, die Datenmenge zu reduzieren, indem folgender Query verwendet wird:

ReQL: r.db(db) .table(table) .pluck([id,name,field])‍‍ .filter({field:1}) .pluck([id,name])

So würden die Felder hier schon vor dem Filter auf das notwendige reduziert, was die Belastung für den Arbeitsspeicher reduzieren kann.

Ein wesentliches Unterscheidungsmerkmal ist jedoch die Push Funktionalität. Dazu kann an jeden Query ein .changes() gehängt werden. Die Datenbank überwacht nun ständig die sich ändernden Daten und ruft im Falle eines Treffers die angegebene Callback Funktion mit den neuen Daten auf.

Das oben genannte Beispiel um ein .changes() ergänzt, würde die Callback Funktion aufrufen, wenn ein neues Dokument mit dem Feld field=1 hinzugefügt oder in einem bestehenden Dokument field zu 1 geändert würde. Auf diese Weise lassen sich spielend einfach komplexeste Datenabläufe logisch und einfach integrieren.

Beispiele aus der Praxis könnten sein:

  • Eine Nachricht an den Sales Manager sobald ein Kunde für einen gewissen Betrag einkauft
  • Eine E-Mail an einen Administrator wenn ein Fehler in eine Log Tabelle geschrieben wird
  • Das anlegen eines neuen Auftrags im Warenwirtschaftssystem wenn über die Webseite eine Bestellung eingeht
  • Live Analyse von Sensordaten aus Anlagen oder Wetterstationen

Haben sie Fragen oder Kommentare?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*