neighbourhoodie-nnh-logo

Structured Query Server

SQL-Abfragen f√ľr Apache CouchDB

Produktbeschreibung

Structured Query Server (SQS) ist eine SQL-Abfrage-Engine f√ľr CouchDB, mit der durch komplexe SQL SELECT-Anweisungen √§u√üerst flexibel Informationen aus einer CouchDB-Datenbank extrahiert werden k√∂nnen.

Anwendungsfälle

Entwickler_innen können komplexere Software auf CouchDB schneller implementieren, und zwar ohne Leistungseinbußen oder Verzicht auf die einzigartigen Replikationsfähigkeiten von CouchDB.

SQS erweitert nahtlos die nativen Abfragemechanismen von CouchDB und erlaubt komplexe, bislang mit CouchDB-Daten unmögliche Abfragen, unter Anderem das Suchen von Dokumenten nach mehreren Kriterien, das Sortieren nach mehreren anderen Werten, und komplexe JOIN-Operationen.

Datenanalyst_innen können nun mit ihren gewohnten Werkzeugen Daten aus CouchDB abfragen, ohne dass zusätzliche Infrastruktur vonnöten wäre.

SQS gibt Datenanalyst_innen vollen Zugriff auf CouchDB-Daten, ohne dass sie die Eigenheiten von CouchDB lernen m√ľssen.

Produktmerkmale

HTTP-Schnittstelle, die JSON zur√ľckgibt: √úberall ohne Overhead verf√ľgbar, kein SQL-Client notwendig.

SQS läuft parallel zu CouchDB und bleibt automatisch auf dem neuesten Stand.

Funktioniert problemlos mit den meisten Datenbank-Strukturen und Knoten-Konfigurationen.

Verarbeitet problemlos millionen Dokumente pro Datenbank.

Schnelle Indizierung der Daten (im Durchschnitt ungefähr so schnell wie JS-Views in CouchDB)

Structured Query Server orientiert sich funktional an CouchDB:

  • Wird das Schema in einem Design-Dokument ge√§ndert, aktualisiert sich SQS automatisch
  • Indizes werden in SQS as hashes des Schemas gespeichert, das erlaubt das "aufw√§rmen" von Indizes vor der Verwendung in einem Produktions-Kontext
  • Unterst√ľtzt _purge f√ľr das strikte Entfernen von Daten, z.B. aus GDPR-Gr√ľnden.
  • Mit _stats-Endpunkt, der n√ľtzliche Laufzeit-Statistiken ausgibt
  • Verschiedene Log-Levels von Request-Logging bis Debugging nach stdout, syslog oder in eine Datei.
  • Unterst√ľtzt sowohl CouchDB-Instanzen mit einem einzigen Knoten als auch CouchDB-Cluster, inklusive dem Zur√ľckspulen der _changes-feeds
  • Compaction von Indizes wird automatisch erledigt, kann aber auch auf manuell umgestellt werden.
  • Von Grund auf als crash-proof ausgelegt, genau wie CouchDB auch (der SQS-Prozess kann ohne Vorwarnung jederzeit problemlos gestoppt werden).

Installation und Verwendung

Structured Query Server wird als binary ausgeliefert und ist einfach einzurichten und zu verwenden.

Installation

  1. Structured Query Server im Terminal starten und dabei die URL der Ziel-CouchDB angeben
  2. In jeder abzufragenden CouchDB-Datenbank ein SQS-spezifisches Design-Dokument anlegen, in dem das Schema und die Zuordnungen zwischen CouchDB-Dokumenten und SQL Tabellen und Zeilen definiert wird.

Verwendung

SQL SELECT-Befehle werden via einfache HTTP-requests an den Structured Query Server geschickt:

curl http://user:pass@couchdb.examople.com:4984/db/_design/sqs -X POST \
-d 'SELECT ein_feld FROM table WHERE anderes_feld = 'wert' AND drittes_feld = 42 ORDER BY noch_ein_anderes_feld DESC LIMIT 5'

SQS ist aktuell f√ľr Linux x86_64, Mac x86_64 und Windows x86_64 verf√ľgbar, die Unterst√ľtzung weiterer Architekturen ist in Arbeit.

Zus√§tzlich bieten wir ein Supportpaket f√ľr SQS an, falls zus√§tzliche Unterst√ľtzung bei der Einrichtung oder produktiven Nutzung des Structured Query Servers erforderlich ist. F√ľr Fragen hierzu stehen wir gerne zur Verf√ľgung.

Technische Details

Structured Query Server ist eine Node.js-Software und verwendet SQLite f√ľr Datenpersistenz und f√ľr Abfragen. Die event-basierte Laufzeitumgebung von Node.js ist perfekt f√ľr SQS, welcher Daten aus CouchDB √ľber das Netzwerk l√§dt und die Ergebnisse in Indizes speichert, und dabei gleichzeitig schnelle HTTP-requests f√ľr SQL-Abfragen mit hoher Parallelit√§t erm√∂glicht.

SQS ist ein HTTP-Server, der automatisch die Zugangseinstellungen der CouchDB √ľbernimmt, es ist kein weiteres Zugangsmanagement erforderlich.

Unterst√ľtzt s√§mtliche SQLite-features:

  • Subqueries, auch korellierte subqueries.
  • Bis zu 64-fache JOINs.
  • LEFT, RIGHT, FULL INNER, OUTER und CROSS JOINs.
  • DISTINCT, ORDER BY, GROUP BY, HAVING, LIMIT, und OFFSET.
  • UNION, UNION ALL, INTERSECT, und EXCEPT.

Preise

SQS ist als Kaufsoftware oder in Ratenzahlungen √ľber 12 oder 24 Monate erh√§ltlich:

Ggf. zzgl. Umsatzsteuer

Weitere Details finden Sie in unserem Lizenzvertrag f√ľr SQS.

Um sicherzustellen, dass Sie bei Bedarf kompetente Unterst√ľtzung bei der Nutzung von SQS bekommen, bieten wir den Produktsupport separat an:

SQS Support f√ľr nur 44 EUR* pro Monat und Nutzer

  • Generelle SQS-Bezogene Unterst√ľtzung durch unsere CouchDB-Experten
  • Hilfe bei der Installation und Einrichtung von SQS
  • Hilfe bei der Verwendung und Optimierung von SQS
  • Informationen und Input zu neuen und geplanten Features

Mehr Informationen auf der Seite f√ľr den Structured Query Server Support.

Ggf. zzgl. Umsatzsteuer

FAQ

Welche Grenzen gibt es bei der Nutzung von SQS mit CouchDB?

CouchDB erm√∂glicht simple und mittelm√§√üig komplexe Abfragen bei hoher Geschwindigkeit und extremer Skalierbarkeit. Die Begrenzung der Komplexit√§t ist dabei durchaus Absicht, da es erst hierdurch m√∂glich wird, dieselben Abfragen auf einer ein-Knoten CouchDB oder einem Cluster mit 100 Knoten zu machen. Der Gro√üteil aller CouchDB-Nutzer hat allerdings Instanzen mit 1‚Äď6 Knoten, und f√ľr diese Nutzer kann der Structured Query Server wieder in die andere Richtung gewichten und sehr komplexe Abfragen zu Lasten der Skalierbarkeit erlauben. Structured Query Server ist dabei immer noch ordentlich schnell und h√§lt auch bei gro√üen Datenmengen mit, aber ab einer gewissen Cluster-Gr√∂√üe sind die Grenzen dann doch irgendwann erreicht. Weiter unten ist eine Leistungs√ľbersicht zu finden, mit der sich grob absch√§tzen l√§sst, ob SQS eine realistische Option f√ľr Sie ist.

Ist SQS mit anderer SQL-Software kompatibel?

Nein, SQS ist keine vollst√§ndige SQL-Schnittstelle, sondern unterst√ľtzt nur SELECT-Abfragen.

Gibt es SQS nur f√ľr SQLite?

Aktuell ja, wir evaluieren allerdings das Interesse an anderen Varianten: Structured Query Server f√ľr MySQL, PostgreSQL, MSSQL und Oracle. Melden Sie hier Ihn Interesse an, und wir verschicken eine Benachrichtigung, wenn sich bei denen von Ihnen gew√§hlten SQL-Varianten etwas tut.

Leistungsfähigkeit von SQS

Um die h√∂chstm√∂gliche Leistungsf√§higkeit von SQS zu erm√∂glichen, haben wir ausgiebige Tests und benchmarks durchgef√ľhrt. Diese dienen als Richtlinien und Gr√∂√üenordnungsvergleiche f√ľr Ihre eigenen Installationen. Anhand dieser l√§sst sich entscheiden, ob SQS mit Ihrer CouchDB gut funktionieren wird. Dabei gibt es zwei Schwerpunkte: Indizierungsgeschwindigkeit und Abfragegeschwindigkeit.

Indizierungsgeschwindigkeit

Hier betrachten wir zwei Vergleiche:

  1. Wie viel langsamer ist SQS beim Erstellen eines Index aus dem CouchDB _changes feed im Vergleich zu einem curl-Befehl, der den _changes feed an /dev/null leitet. Nat√ľrlich ist letzteres im Alltag nicht n√ľtzlich, stellt aber eine theoretische Maximalgeschwindigkeit dar. SQS wird hier langsamer sein, aber daf√ľr gibt es vollst√§ndige SQL-Indizes und Persistenz bei vergleichsweise geringen Geschwindigkeitseinbu√üen.
  2. Wie schnell ist SQS im Vergleich zu CouchDB JavaScript views, der komplexesten Option f√ľr Abfragen aus einer CouchDB? Hier leistet SQS bei vergleichbarer Geschwindigkeit wesentlich mehr.

SQS vs _changes nach /dev/null (theoretisches Optimum)

Anzahl DokumenteDokumentengröße in bytesDifferenz
1‚ÄČ000 ‚ÄĒ 10‚ÄČ000‚ÄČ0001003,5x (langsamer)
1‚ÄČ000 ‚ÄĒ 10‚ÄČ000‚ÄČ00010001,87x (langsamer)
1‚ÄČ000 ‚ÄĒ 10‚ÄČ000‚ÄČ00010‚ÄČ0001,98x (langsamer)

Hier bekommt man also mit SQS bei einer typischen CouchDB f√ľr eine ca. zweifache Verlangsamung gegen√ľber dem theoretischen Optimum eine vollst√§ndiges SQL-Setup. Ziemlich gut!

SQS vs JS Views

q=1 Datenbank

Anzahl DokumenteDokumentengröße in bytesDifferenz
1‚ÄČ000 ‚ÄĒ 10‚ÄČ000‚ÄČ0001000,76x (schneller)
1‚ÄČ000 ‚ÄĒ 10‚ÄČ000‚ÄČ00010000,84x (schneller)
1‚ÄČ000 ‚ÄĒ 10‚ÄČ000‚ÄČ00010,0001,18x (langsamer)

q=2 Datenbank

Anzahl DokumenteDokumentengröße in bytesDifferenz
1‚ÄČ000 ‚ÄĒ 10‚ÄČ000‚ÄČ0001000,86x (schneller)
1‚ÄČ000 ‚ÄĒ 10‚ÄČ000‚ÄČ00010000,99x (vergleichbar schnell)
1‚ÄČ000 ‚ÄĒ 10‚ÄČ000‚ÄČ00010,0001,56x (langsamer)

q=4 Datenbank

Anzahl DokumenteDokumentengröße in bytesDifferenz
1‚ÄČ000 ‚ÄĒ 10‚ÄČ000‚ÄČ0001000,95x (vergleichbar schnell)
1‚ÄČ000 ‚ÄĒ 10‚ÄČ000‚ÄČ00010001,07x (vergleichbar schnell)
1‚ÄČ000 ‚ÄĒ 10‚ÄČ000‚ÄČ00010,0001,81x (langsamer)

Mit erhöhtem sharding kann CouchDB multi-core-Systeme besser ausnutzen, aber selbst bei großen Datenbanken kann SQS noch gut mithalten. Bei kleineren Datenbanken ist SQS sogar schneller als JS views. Im Anbetracht der Komplexität der mit SQS möglichen Abfragen sind das sehr gute Messwerte.

Abfragegeschwindigkeit

Hier messen wir die requests pro Sekunde an SQS. Jeder Durchlauf besteht aus 1‚ÄČ000‚ÄČ000 zuf√§lligen Abfragen gegen einen fertig gebauten Index. Hierbei war letztlich unerheblich, wieviele requests gleichzeitig gemacht wurden (wir haben zwischen 1 und 1000 getestet), die Ergebnisse waren unabh√§ngig davon immer √§hnlich.

Anzahl DokumenteZeit pro request (ms)Requests pro Sekunde
1‚ÄČ000 ‚ÄĒ 100‚ÄČ0002,73381,1
500‚ÄČ000 ‚ÄĒ¬†750‚ÄČ0003,01321,2
750‚ÄČ000 ‚ÄĒ 1‚ÄČ000‚ÄČ00012,266,65

Wir schlie√üen daraus, dass SQS bis etwa 750‚ÄČ000 Dokumenten im Index f√ľr die meisten Anwendungen schnell genug ist, und dar√ľberhinaus die Grenzen der zugrundeliegenden SQLite-Bibliothek zum Vorschein kommen, wobei die Leistung selbst dann immer noch nicht schlecht ist. Falls Sie h√∂here Leseleistung bei gr√∂√üeren Dokumentenmengen brauchen, melden Sie Sich gerne bei uns, wir benachrichtigen Sie, sobald wir SQS weiter verbessert haben.

F√ľr mehr Parallelit√§t ist auch m√∂glich, mehere SQS-Instanzen laufen zu lassen, entweder auf multi-Core-Maschinen mit freier CPU-Kapazit√§t oder auf dedizierten Maschinen.

Interesse daran, mit uns zu arbeiten?

Eine √úbersicht unserer Leistungen befindet sich auf unserer Homepage.