Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Datenbank am Limit: spaltenorientiert als Ausweg

Datenbank am Limit: spaltenorientiert als Ausweg

Wir alle kennen und schätzen SQL- und NoSQL-­Datenbanken. Doch es gibt Anwendungsfälle, in denen diese Datenbanken an ihre Grenzen stoßen. Zum Beispiel bei der Analyse von Finanzmarktdaten. Dort müssen Zeitreihen von enormer Größe verarbeitet werden. Der Vortrag zeigt auf, wie spaltenorientierte Datenbanken dieses Problem lösen. Die Architektur solcher Tick-Data­-Systeme wird beleuchtet. Der Vortrag endet mit dem Beispiel einer technischen Implementierung für Finanzmarktdaten.

Michael Wittig

April 22, 2015
Tweet

More Decks by Michael Wittig

Other Decks in Programming

Transcript

  1. Zeit Käufer Verkäufer 11:00:00.000 11:00:00.009 11:00:00.025 11:00:00.207 11:00:00.555 11:00:00.873 5000

    @ 84,81 4700 @ 84,81 1000 @ 84,82 7000 @ 84,81 2000 @ 84,81 1500 @ 84,81 500 @ 84,82 200 @ 84,82 900 @ 84,83 800 @ 84,82 200 @ 84,82 100 @ 84,82 Daimler Aktie unregelmäßig
  2. /Datenbank /Daimler_Quotes /123.dat SELECT Käufer_Preis FROM Daimler_Quotes WHERE Zeit>10:00:00 Zeit

    10:00:03 Käufer_Menge 7000 Käufer_Preis 84,81 Verkäufer_Menge 84,82 Verkäufer_Preis 1000 > 10:00:00 Binäre Suche über alle Dateien *.dat
  3. /Datenbank /Daimler_Quotes /1.dat /2.dat /3.dat /4.dat /5.dat SELECT Käufer_Preis FROM

    Daimler_Quotes WHERE Zeit>10:00:00 /Datenbank /Daimler_Quotes /124.dat /125.dat /126.dat /127.dat /… Lese alle Dateien ab 124.dat
  4. /Datenbank /Daimler_Quotes /Zeit.dat SELECT Käufer_Preis FROM Daimler_Quotes WHERE Zeit>10:00:00 Zeile

    Daten … 120 09:59:51 121 09:59:57 123 10:00:03 124 10:00:12 … > 10:00:00 Binäre Suche über eine Datei Zeit.dat sortiert
  5. /Datenbank /Daimler_Quotes /Käufer_Preis.dat SELECT Käufer_Preis FROM Daimler_Quotes WHERE Zeit>10:00:00 Zeile

    Daten 123 84,81 124 84,82 125 84,82 126 84,81 127 84,80 … Lese eine Datei Käufer_Preis.dat erst ab Zeile 123
  6. /DaimlerQuotes /2015-01-01 /Zeit.dat, Käufer_Preis.dat, … /2015-01-02 /Zeit.dat, Käufer_Preis.dat, … /2015-01-03

    SELECT Käufer_Preis FROM DaimlerQuotes WHERE Datum=2015-01-02 AND Zeit>10:00:00
  7. /DaimlerQuotes /2015-01-01 /Zeit.dat, Käufer_Preis.dat, … /2015-01-02 /Zeit.dat, Käufer_Preis.dat, … /2015-01-03

    SELECT Käufer_Preis FROM DaimlerQuotes WHERE Datum=2015-01-02 AND Zeit>10:00:00
  8. Was ist kdb+? • Implementiert in Q bzw. K •

    In-Memory Datenbank mit Persistenzschicht • Daten liegen sowohl im Speicher als auch auf Festplatte im gleichen Format vor • Spaltenorientiert • Abfragesprache Q oder Q-SQL • Optimierter Zugriff auf Festplatten
  9. 1+2 => 3 sum 1 2 3 => 6 (1

    2 3 4 5)+1 => (2 3 4 5 6) (1 2 3)+(4 5 6) => (5 7 9) sums 1 2 3 4 5 6 => 1 3 6 10 15 21
  10. select max kauf_preis by datum from quotes where symbol=`Daimler datum

    | kauf_preis ———————————————————————— 2015-01-02 | 75,57 2015-01-03 | 74,81 2015-01-04 | 76,13
  11. Was kdb+ nicht ist • Keine Stored Procedures vs Application

    Server Abwägungen: Code nahe an die Daten • Keine Verluste durch (De)Serialisierung beim Transport zwischen Datenbank und Applikation durch "spezielles" Format • Keine ORM Probleme • Keine Universal-Datenbank
  12. Tickerplant • Setzen eines Zeitstempels: garantiert Sortierung • Speichern der

    Daten in einem Logfile • Publish/Subscribe Mechanismus • Initiierung des Endofday Events beim wechseln des Tages (00:00:00 Uhr) • Input: 100.000 Werte / Sekunde (1 Thread)
  13. Echtzeit Datenbank • subskribiert beim Start alle Daten bei der

    tp • liest das aktuelle Logfile ein • hält alle Daten des aktuellen Tages im Speicher • persistiert alle Daten des Tages auf Platte bei Endofday Event
  14. • Open Source • spaltenorientiert • seit ~1997 • SQL

    2003 • Echtzeit (DataCell ) und Historie • R Integration
  15. • Redshift • Closed Source & SaaS • spaltenorientiert •

    Historie • Kinesis • Closed Source & SaaS • Echtzeit