KDB+, Produkt des Unternehmens â ist eine in Fachkreisen weithin bekannte, extrem schnelle Spalten-Datenbank, die zur Speicherung von Zeitreihendaten und deren analytischer Verarbeitung entwickelt wurde. UrsprĂŒnglich war sie (und ist es immer noch) sehr beliebt in der Finanzindustrie â sie wird von allen Top-10-Investmentbanken sowie vielen bekannten Hedgefonds, Börsen und anderen Organisationen genutzt. In letzter Zeit hat KX beschlossen, die Kundenbasis zu erweitern und bietet nun Lösungen auch in anderen Bereichen an, in denen eine groĂe Menge an Daten zeitlich oder anderweitig geordnet vorliegt â Telekommunikation, Bioinformatik, Fertigung usw. AuĂerdem sind sie Partner des Teams Aston Martin Red Bull Racing in der Formel 1, wo sie dabei helfen, Daten von den Sensoren der Boliden zu sammeln und Tests im Windkanal zu analysieren. In diesem Artikel möchte ich erlĂ€utern, welche Eigenschaften KDB+ so leistungsstark machen, warum Unternehmen bereit sind, viel Geld dafĂŒr auszugeben und schlieĂlich, warum es sich tatsĂ€chlich nicht um eine Datenbank handelt.
Â

Â
In diesem Artikel werde ich versuchen, im Allgemeinen zu erklĂ€ren, was KDB+ ist, welche Möglichkeiten und EinschrĂ€nkungen es hat und welchen Nutzen es fĂŒr Unternehmen hat, die groĂe Datenmengen verarbeiten möchten. Ich werde nicht auf die Details der Implementierung von KDB+ und auf die Einzelheiten ihrer Programmiersprache Q eingehen. Beide Themen sind sehr umfangreich und verdienen separate Artikel. Viele Informationen zu diesen Themen sind auf der Website code.kx.com zu finden, einschlieĂlich eines Buches ĂŒber Q â Q For Mortals (siehe Link unten).
Einige Begriffe
- In-Memory-Datenbank. Eine Datenbank, die Daten im Hauptspeicher speichert, um den Zugriff zu beschleunigen. Die Vorteile einer solchen Datenbank sind offensichtlich, wĂ€hrend die Nachteile die Möglichkeit von Datenverlust und die Notwendigkeit, viel Speicherplatz auf dem Server zur VerfĂŒgung zu haben, umfassen.
- Spalten-Datenbank. Eine Datenbank, in der Daten spaltenweise und nicht zeilenweise gespeichert werden. Der Hauptvorteil einer solchen Datenbank besteht darin, dass Daten aus einer Spalte zusammen auf der Festplatte und im Speicher abgelegt werden, was den Zugriff erheblich beschleunigt. Es ist nicht nötig, Spalten zu laden, die in der Anfrage nicht verwendet werden. Der Hauptnachteil ist, dass das Ăndern und Löschen von DatensĂ€tzen kompliziert ist.
- Zeitreihe. Daten mit einer Datum- oder Zeitspalte. In der Regel ist bei solchen Daten die zeitliche Reihenfolge wichtig, um leicht bestimmen zu können, welcher Eintrag dem aktuellen vor oder nachfolgt, oder um Funktionen anzuwenden, deren Ergebnisse von der Reihenfolge der EintrÀge abhÀngen. Klassische Datenbanken basieren auf einem völlig anderen Prinzip - der Darstellung einer Menge von EintrÀgen als Menge, bei der die Reihenfolge der EintrÀge grundsÀtzlich nicht definiert ist.
- Vektor. Im Kontext von KDB+ ist dies eine Liste von Elementen des gleichen atomaren Typs, z. B. Zahlen. Mit anderen Worten, ein Array von Elementen. Arrays können, im Gegensatz zu Listen, kompakt gespeichert und unter Verwendung von Vektoranweisungen des Prozessors verarbeitet werden.
Â
Historisches Nachschlagewerk
Das Unternehmen KX wurde 1993 von Arthur Whitney gegrĂŒndet, der zuvor bei Morgan Stanley an der Sprache A+ gearbeitet hatte, einem Nachfolger von APL - einer sehr originellen und zur damaligen Zeit beliebten Sprache in der Finanzwelt. SelbstverstĂ€ndlich setzte Arthur bei KX diesen Geist fort und schuf die vektorisch-funktionale Sprache K, geleitet von Ideen radikalen Minimalismus. Programme in K erscheinen wie eine chaotische Ansammlung von Satzzeichen und speziellen Symbolen, deren Bedeutung vom Kontext abhĂ€ngt, und jede Operation trĂ€gt viel mehr Bedeutung in sich, als dies in herkömmlichen Programmiersprachen der Fall ist. Dadurch benötigt ein Programm in K nur minimalen Platz - einige Zeilen können Seiten Text einer wortreichen Sprache wie Java ersetzen - und ist eine extrem kompakte Umsetzung eines Algorithmus.
Â
Eine Funktion in K, die den GroĂteil des LL1-Parser-Generators fĂŒr eine gegebene Grammatik implementiert:
1. pp:{q:{(x;p3(),y)};r:$[-11=@x;$x;11=@x;q[`N;$*x];10=abs@@x;q[`N;x]
2. ($)~*x;(`P;p3 x 1);(1=#x)&11=@*x;pp[{(1#x;$[2=#x;;,:]1_x)}@*x]
3. (?)~*x;(`Q;pp[x 1]);(*)~*x;(`M;pp[x 1]);(+)~*x;(`MP;pp[x 1]);(!)~*x;(`Y;p3 x 1)
4. (2=#x)&(@x 1)in 100 101 107 7 -7h;($[(@x 1)in 100 101 107h;`Ff;`Fi];p3 x 1;pp[*x])
5. (|)~*x;`S,(pp'1_x);2=#x;`C,{@[@[x;-1+#x;{x,")"}];0;"(",]}({$[".s.C"~4#x;6_-2_x;x]}'pp'x);'`pp];
6. $[@r;r;($[1<#r;".s.";""],$*r),$[1<#r;"[",(";"/;1_r),"]";""]]}Â Â
 Diese Philosophie der extremen Effizienz bei minimalen Bewegungen hat Arthur auch in KDB+ verwirklicht, das 2003 entstand (ich denke, jetzt ist klar, woher das K im Namen stammt) und nichts anderes ist als ein Interpreter der vierten Version der K-Sprache. Ăber K wurde eine benutzerfreundlichere Version namens Q hinzugefĂŒgt. In Q wurde ebenfalls die UnterstĂŒtzung fĂŒr einen speziellen SQL-Dialekt â QSQL â integriert sowie UnterstĂŒtzung fĂŒr Tabellen als Systemdatentyp, Werkzeuge zur Arbeit mit Tabellen im Speicher und auf der Festplatte usw.
Â
Somit ist KDB+ aus der Sicht des Nutzers einfach ein Interpreter der Sprache Q mit UnterstĂŒtzung fĂŒr Tabellen und SQL-Ă€hnliche AusdrĂŒcke im LINQ-Stil aus C#. Dies ist das wichtigste Unterscheidungsmerkmal von KDB+ zu anderen Datenbanken und ihr Hauptvorteil, der oft ĂŒbersehen wird. Es ist keine Datenbank + unterstĂŒtzende Sprache, sondern eine vollstĂ€ndige leistungsstarke Programmiersprache + integrierte UnterstĂŒtzung fĂŒr Datenbankfunktionen. Diese Unterscheidung wird eine entscheidende Rolle bei der Auflistung aller Vorteile von KDB+ spielen. Zum Beispiel ...
Â
GröĂe
Nach modernen MaĂstĂ€ben hat KDB+ einfach eine mikroskopisch kleine GröĂe. Es handelt sich buchstĂ€blich um eine ausfĂŒhrbare Datei, die kleiner als ein Megabyte ist, und eine kleine Textdatei mit einigen Systemfunktionen. TatsĂ€chlich sind es weniger als ein Megabyte, und fĂŒr dieses Programm zahlen Unternehmen jĂ€hrlich Zehntausende von Dollar fĂŒr einen Prozessor auf dem Server.
- Eine solche GröĂe ermöglicht es KDB+, auf jeder Hardware hervorragend zu funktionieren â vom Mikrocomputer Pi bis hin zu Servern mit Terabytes an Arbeitsspeicher. Dies hat keinen Einfluss auf die FunktionalitĂ€t; vielmehr startet Q sofort, was es auch als Skriptsprache verwendbar macht.
- Bei dieser GröĂe passt der Q-Interpreter vollstĂ€ndig in den Cache des Prozessors, was die AusfĂŒhrung von Programmen beschleunigt.
- Bei einer solchen GröĂe des ausfĂŒhrbaren Programms nimmt der Prozess Q vernachlĂ€ssigbar wenig Speicherplatz ein, man kann sie hunderte Male starten. Dabei kann Q, wenn nötig, auch mit Dutzenden oder Hunderten von Gigabytes Speicher innerhalb eines Prozesses umgehen.
Vielseitigkeit
Q eignet sich hervorragend fĂŒr die unterschiedlichsten Aufgaben. Der Prozess Q kann als historische Datenbank fungieren und bietet schnellen Zugriff auf Terabytes an Informationen. Wir haben beispielsweise Dutzende historischer Datenbanken, von denen einige einen unkomprimierten Tag Daten speichern, der mehr als 100 Gigabyte umfasst. Dennoch kann eine Abfrage an die Datenbank unter angemessenen EinschrĂ€nkungen in Zehnteln bis hunderten von Millisekunden durchgefĂŒhrt werden. Insgesamt haben wir fĂŒr die Benutzeranfragen einen universellen Timeout von 30 Sekunden, der sehr selten ausgelöst wird.
Â
Mit derselben Leichtigkeit kann Q auch als In-Memory-Datenbank fungieren. Das HinzufĂŒgen neuer Daten zu den Tabellen im Speicher erfolgt so schnell, dass der limitierende Faktor die Benutzeranfragen sind. Die Daten in den Tabellen werden spaltenweise gespeichert, was bedeutet, dass jede Spaltenoperation den Cache des Prozessors optimal nutzt. DarĂŒber hinaus hat KX versucht, alle grundlegenden Operationen wie arithmetische Berechnungen ĂŒber Vektorinstruktionen des Prozessors zu implementieren, um deren Geschwindigkeit zu maximieren. Q kann auch Aufgaben ausfĂŒhren, die fĂŒr Datenbanken untypisch sind â beispielsweise Streaming-Daten verarbeiten und in âEchtzeitâ (mit Latenzen von mehreren Millisekunden bis zu einigen Sekunden, je nach Aufgabe) verschiedene aggregierte Funktionen fĂŒr Finanzinstrumente ĂŒber unterschiedliche Zeitintervalle berechnen oder ein Modell der Auswirkungen einer durchgefĂŒhrten Transaktion auf den Markt erstellen und deren Profilierung fast sofort nach DurchfĂŒhrung der Transaktion durchfĂŒhren. Bei solchen Aufgaben ist hĂ€ufig nicht Q selbst die Hauptursache fĂŒr die Verzögerung, sondern die Notwendigkeit, Daten aus verschiedenen Quellen zu synchronisieren. Die hohe Geschwindigkeit wird dadurch erreicht, dass sich die Daten und die sie verarbeitenden Funktionen im selben Prozess befinden und die Verarbeitung auf die AusfĂŒhrung mehrerer QSQL-AusdrĂŒcke und Joins reduziert wird, die nicht interpretiert, sondern im BinĂ€rcode ausgefĂŒhrt werden.
Â
SchlieĂlich kann man in Q auch beliebige Serviceprozesse schreiben. Zum Beispiel Gateway-Prozesse, die automatisch Benutzeranfragen an die erforderlichen Datenbanken und Server verteilen. Der Programmierer hat völlige Freiheit, jeden Algorithmus zur Lastverteilung, Priorisierung, Fehlerresistenz, Zugriffsrechten, Quoten und generell alles, was er möchte, zu implementieren. Das Hauptproblem dabei ist, dass man alles selbst umsetzen muss.
Â
Als Beispiel nenne ich, welche Arten von Prozessen wir haben. Alle werden aktiv genutzt und arbeiten zusammen, um Dutzende verschiedener Datenbanken zu einer Einheit zu verbinden, Daten aus vielen Quellen zu verarbeiten und Hunderte von Benutzern und Anwendungen zu bedienen.
- Connectoren (feedhandler) zu Datenquellen. Diese Prozesse verwenden in der Regel externe Bibliotheken, die in Q geladen werden. Die C-Schnittstelle in Q ist Ă€uĂerst einfach und ermöglicht es, problemlos Proxy-Funktionen fĂŒr jede C/C++-Bibliothek zu erstellen. Q ist schnell genug, um beispielsweise gleichzeitig den Datenstrom von FIX-Nachrichten von allen europĂ€ischen Börsen zu verarbeiten.
- Datenverteiler (tickerplant), die als Zwischenglied zwischen den Connectoren und den Verbrauchern fungieren. Gleichzeitig schreiben sie die eingehenden Daten in ein spezielles binÀres Protokoll, um den Verbrauchern einen robusten Schutz vor Verbindungsverlusten oder Neustarts zu bieten.
- In-Memory-Datenbanken (rdb). Diese Datenbanken bieten den schnellstmöglichen Zugriff auf frische Rohdaten, indem sie sie im Speicher halten. In der Regel sammeln sie ĂŒber den Tag Daten in Tabellen und setzen diese nachts zurĂŒck.
- Persistente Datenbanken (pdb). Diese Datenbanken gewÀhrleisten die Speicherung der tÀglichen Daten in einer historischen Datenbank. In der Regel speichern sie im Gegensatz zu rdb die Daten nicht im Speicher, sondern verwenden einen speziellen Cache auf der Festplatte wÀhrend des Tages und kopieren die Daten zur Mitternacht in die historische Datenbank.
- Historische Datenbanken (hdb). Diese Datenbanken ermöglichen den Zugriff auf Daten der vergangenen Tage, Monate und Jahre. Ihre GröĂe (in Tagen) ist nur durch die KapazitĂ€t der Festplatten begrenzt. Die Daten können ĂŒberall gespeichert werden, insbesondere auf verschiedenen Festplatten zur Beschleunigung des Zugriffs. Es besteht die Möglichkeit, Daten unter Verwendung mehrerer Algorithmen zu komprimieren. Die Struktur der Datenbank ist gut dokumentiert und einfach, die Daten werden chronologisch in regulĂ€ren Dateien gespeichert, so dass sie auch mit Hilfe des Betriebssystems verarbeitet werden können.
- Datenbanken mit aggregierten Informationen. Sie speichern verschiedene Aggregationen, in der Regel gruppiert nach dem Namen des Instruments und dem Zeitintervall. In-Memory-Datenbanken aktualisieren ihren Zustand mit jeder eingehenden Nachricht, wÀhrend historische Datenbanken vorab berechnete Daten speichern, um den Zugriff auf historische Daten zu beschleunigen.
- SchlieĂlich Gateway-Prozesse, die Anwendungen und Benutzer bedienen. Q ermöglicht die vollstĂ€ndige asynchrone Verarbeitung eingehender Nachrichten, deren Verteilung auf Datenbanken, die ĂberprĂŒfung von Zugriffsrechten usw. Ich möchte darauf hinweisen, dass die Nachrichten nicht beschrĂ€nkt sind und in der Regel keine SQL-AusdrĂŒcke sind, wie das in anderen Datenbanken der Fall ist. Am hĂ€ufigsten ist der SQL-Ausdruck in einer speziellen Funktion verborgen und wird basierend auf den vom Benutzer angeforderten Parametern konstruiert â es erfolgt eine Zeitkonvertierung, Filterung, die Daten werden normalisiert (zum Beispiel wird der Aktienpreis angepasst, wenn Dividenden ausgeschĂŒttet wurden) usw.
Typische Architektur fĂŒr einen Datentyp:

Geschwindigkeit
Obwohl Q eine interpretierte Sprache ist, handelt es sich gleichzeitig um eine Vektorsprache. Das bedeutet, dass viele eingebaute Funktionen, insbesondere mathematische, Argumente jeder Form akzeptieren â Zahlen, Vektoren, Matrizen, Listen â und vom Programmierer erwartet wird, dass er das Programm als Operationen auf Arrays umsetzt. In einer solchen Sprache, wenn Sie zwei Vektoren mit einer Million Elementen addieren, spielt es keine Rolle, dass die Sprache interpretiert ist, die Addition wird durch eine superoptimierte binĂ€re Funktion durchgefĂŒhrt. Da der gröĂte Teil der Zeit in Programmen auf Q fĂŒr Operationen mit Tabellen aufgebracht wird, die diese grundlegenden vektorisierenden Funktionen nutzen, ergibt sich eine ziemlich respektable Geschwindigkeit, die die Verarbeitung groĂer Datenmengen sogar in einem einzigen Prozess ermöglicht. Es Ă€hnelt den mathematischen Bibliotheken in Python â obwohl Python selbst eine ziemlich langsame Sprache ist, gibt es viele groĂartige Bibliotheken wie numpy, die die Verarbeitung numerischer Daten mit der Geschwindigkeit einer kompilierbaren Sprache ermöglichen (ĂŒbrigens ist numpy ideologisch Q sehr Ă€hnlich).
Â
DarĂŒber hinaus wurde bei KX sehr sorgfĂ€ltig an der Gestaltung der Tabellen und der Optimierung der Arbeit mit ihnen gearbeitet. Erstens werden mehrere Arten von Indizes unterstĂŒtzt, die von integrierten Funktionen unterstĂŒtzt werden und nicht nur auf Tabellen spalten, sondern auch auf beliebige Vektoren angewendet werden können â Gruppierung, Sortierung, Attribut der Einzigartigkeit und spezielle Gruppierung fĂŒr historische Datenbanken. Indizes werden einfach angelegt und automatisch angepasst, wenn Elemente in eine Spalte/Vektor hinzugefĂŒgt werden. Indizes können sowohl auf Tabellen spalten im Speicher als auch auf der Festplatte erfolgreich angewendet werden. Bei der AusfĂŒhrung einer QSQL-Abfrage werden die Indizes automatisch verwendet, wenn möglich. Zweitens wird der Umgang mit historischen Daten ĂŒber den Mechanismus der Abbildung von Betriebssystemdateien (memory map) realisiert. GroĂe Tabellen werden niemals vollstĂ€ndig in den Arbeitsspeicher geladen, stattdessen werden die benötigten Spalten direkt in den Arbeitsspeicher abgebildet, und es wird tatsĂ€chlich nur der Teil geladen, der benötigt wird (dabei helfen unter anderem die Indizes). FĂŒr den Programmierer spielt es keine Rolle, ob die Daten im Speicher sind oder nicht, der Mechanismus der Arbeit mit mmap ist vollstĂ€ndig im Kern von Q verborgen.
Â
KDB+ ist eine nicht-relationale Datenbank, Tabellen können beliebige Daten enthalten, wobei die Reihenfolge der Zeilen in der Tabelle beim HinzufĂŒgen neuer Elemente nicht geĂ€ndert wird und bei der Formulierung von Abfragen verwendet werden kann und sollte. Dieses Merkmal ist besonders wichtig fĂŒr die Arbeit mit Zeitreihen (Börsendaten, Telemetrie, Ereignisprotokolle), denn wenn die Daten nach Zeit sortiert sind, muss der Benutzer keine SQL-Tricks anwenden, um die erste oder letzte zeitlich sortierte Zeile oder N Zeilen in der Tabelle zu finden, oder um zu bestimmen, welche Zeile auf die N-te Zeile folgt, usw. Die VerknĂŒpfungen von Tabellen werden noch weiter vereinfacht, zum Beispiel dauert es ungefĂ€hr eine Sekunde auf der Festplatte und einige Millisekunden im Speicher, um fĂŒr 16.000 Transaktionen von VOD.L (Vodafone) den letzten Kurs aus einer Tabelle mit 500 Millionen Elementen zu finden.
Â
Ein Beispiel fĂŒr einen zeitlichen Join â die Tabelle quote wird in den Arbeitsspeicher abgebildet, daher ist es nicht erforderlich, VOD.L in der where anzugeben, der Index auf der Spalte sym und die Tatsache, dass die Daten nach Zeit sortiert sind, werden implizit verwendet. Fast alle Joins in Q sind gewöhnliche Funktionen und nicht Teil des select-Ausdrucks:
1. aj[`sym`time;select from trade where date=2019.03.26, sym=`VOD.L;select from quote where date=2019.03.26]Â Â
SchlieĂlich ist hervorzuheben, dass die Ingenieure bei KX, beginnend mit Arthur Whitney, wirklich besessen von Effizienz sind und alle Anstrengungen unternehmen, um das Maximum aus den Standardfunktionen von Q herauszuholen und die hĂ€ufigsten Nutzungsmuster zu optimieren.
Â
Fazit
KDB+ ist vor allem aufgrund ihrer auĂergewöhnlichen Vielseitigkeit bei Unternehmen beliebt â sie dient sowohl als In-Memory-Datenbank, als auch als Speicher fĂŒr Terabytes historischer Daten und als Plattform fĂŒr Datenanalysen. Da die Datenverarbeitung direkt in der Datenbank erfolgt, wird eine hohe Geschwindigkeit erreicht und Ressourcen werden gespart. Eine vollwertige Programmiersprache, die mit Datenbankfunktionen integriert ist, ermöglicht es, auf einer Plattform den gesamten Stack notwendiger Prozesse zu realisieren â von der Datenerfassung bis zur Bearbeitung von Benutzeranfragen.
Â
ZusÀtzliche Informationen
Nachteile
Ein wesentlicher Nachteil von KDB+/Q ist die hohe Eintrittsbarriere. Die Sprache hat eine ungewöhnliche Syntax, bestimmte Funktionen sind stark ĂŒberladen (value hat beispielsweise etwa 11 Verwendungsvarianten). Am wichtigsten ist, dass sie einen radikal anderen Ansatz fĂŒr das Programmieren erfordert. In einer Vektorsprache muss man stĂ€ndig in Begriffen von Array-Transformationen denken, alle Schleifen ĂŒber verschiedene Varianten von FunktionalitĂ€ten wie map/reduce (die in Q als Adverbien bezeichnet werden) realisieren und niemals versuchen, Einsparungen zu erzielen, indem man vektorielle Operationen durch atomare ersetzt. Zum Beispiel, um den Index des N-ten Vorkommens eines Elements in einem Array zu finden, sollte man Folgendes schreiben:
1. (where element=vector)[N]Â Â
obwohl dies im MaĂstab von C/Java (= erzeugt einen booleschen Vektor, wo 'where' die Indizes der wahren Elemente darin zurĂŒckgibt) wirklich ineffizient aussieht. Aber eine solche Schreibweise macht den Sinn des Ausdrucks klarer, und man verwendet schnelle vektorielle Operationen anstelle langsamer atomarer. Der konzeptionelle Unterschied zwischen einer Vektorsprache und den anderen ist vergleichbar mit dem Unterschied zwischen imperativen und funktionalen ProgrammieransĂ€tzen, und darauf muss man vorbereitet sein.
Â
Einige Benutzer sind auch mit QSQL unzufrieden. Das liegt daran, dass es nur wie echtes SQL aussieht. In der Praxis handelt es sich jedoch lediglich um einen Interpreter fĂŒr SQL-Ă€hnliche AusdrĂŒcke, der keine Optimierung von Abfragen unterstĂŒtzt. Der Benutzer muss selbst optimale Abfragen schreiben, und zwar in Q, worauf sich viele nicht vorbereiten können. Andererseits kann man natĂŒrlich immer selbst eine optimale Abfrage schreiben, anstatt sich auf den Black-Box-Optimierer zu verlassen.
Â
Ein Vorteil des Buches ĂŒber Q â Q For Mortals ist kostenlos verfĂŒgbar auf , wo auch viele andere nĂŒtzliche Materialien gesammelt sind.
Â
Ein weiterer groĂer Nachteil ist die LizenzgebĂŒhr. Das sind Zehntausende von Dollar pro Jahr fĂŒr einen CPU. Nur groĂe Firmen können sich solche Ausgaben leisten. In letzter Zeit hat KX die Lizenzpolitik flexibler gestaltet und ermöglicht es, nur fĂŒr die Nutzungszeit zu zahlen oder KDB+ in den Clouds von Google und Amazon zu mieten. AuĂerdem bietet KX zum Download an (32-Bit-Version oder 64-Bit-Version auf Anfrage).
Â
Wettbewerber
Es gibt ziemlich viele spezialisierte Datenbanken, die auf Ă€hnlichen Prinzipien basieren â spaltenorientiert, in-memory, und auf sehr groĂe Datenmengen ausgelegt. Das Problem ist, dass es sich hierbei um Spezialdatenbanken handelt. Ein herausragendes Beispiel ist Clickhouse. Diese Datenbank hat ein sehr Ă€hnliches Prinzip zur Datenspeicherung auf der Festplatte und zum Aufbau des Index wie KDB+, einige Abfragen fĂŒhrt sie schneller aus als KDB+, wenn auch nicht signifikant. Doch selbst als Datenbank ist Clickhouse spezialisierter als KDB+ â Web-Analytik vs. beliebige Zeitreihen (dieser Unterschied ist sehr wichtig â wegen ihm gibt es zum Beispiel in Clickhouse keine Möglichkeit, die Ordnung der DatensĂ€tze zu nutzen). Aber vor allem hat Clickhouse nicht die UniversalitĂ€t von KDB+, einer Sprache, die es ermöglicht, Daten direkt in der Datenbank zu verarbeiten, ohne sie vorher in eine separate Anwendung zu laden, beliebige SQL-AusdrĂŒcke zu erstellen, beliebige Funktionen in der Abfrage anzuwenden und Prozesse zu schaffen, die nicht mit der AusfĂŒhrung von Funktionen in der historischen Datenbank verbunden sind. Daher ist es schwierig, KDB+ mit anderen Datenbanken zu vergleichen; sie können in bestimmten Nutzungsszenarien besser sein oder einfach besser, wenn es um Aufgaben klassischer Datenbanken geht, aber mir ist kein anderes so effektives und universelles Werkzeug zur Verarbeitung von Zeitdaten bekannt.
Â
Integration mit Python
Um die Arbeit mit KDB+ fĂŒr Menschen, die mit der Technologie nicht vertraut sind, zu erleichtern, hat KX Bibliotheken zur engen Integration mit Python innerhalb eines Prozesses erstellt. Man kann sowohl jede Python-Funktion aus Q aufrufen als auch umgekehrt â jede Q-Funktion aus Python (insbesondere QSQL-AusdrĂŒcke). Die Bibliotheken konvertieren die Daten bei Bedarf (zur Effizienz nicht immer) von einem Format in das andere. Infolgedessen leben Q und Python in einer so engen Symbiose, dass die Grenzen zwischen ihnen verschwinden. Dadurch hat der Programmierer einerseits vollen Zugriff auf zahlreiche nĂŒtzliche Python-Bibliotheken und erhĂ€lt andererseits eine integrierte, schnelle Datenbank in Python fĂŒr die Arbeit mit groĂen Datenmengen, was besonders nĂŒtzlich fĂŒr diejenigen ist, die sich mit maschinellem Lernen oder Modellierung beschĂ€ftigen.
Â
Arbeiten mit Q in Python:
1. >>> q()
2. q)trade:([]date:();sym:();qty:())
3. q)
4. >>> q.insert('trade', (date(2006,10,6), 'IBM', 200))
5. k(',0')
6. >>> q.insert('trade', (date(2006,10,6), 'MSFT', 100))
7. k(',1')Â Â
Links
Unternehmenswebsite â
Entwicklerseite â
Buch Q For Mortals (auf Englisch) â
Artikel ĂŒber die Anwendung von KDB+/Q von Mitarbeitern von kx â
Quelle: habr.com
