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 zur Lösung von Realtime und historischen Analysen wird beleuchtet. Der Vortrag endet mit dem Beispiel einer technischen Implementierung für Sensordaten aus dem Internet of Things (IoT).

E8f66870d1204779ecc45f2695faa73e?s=128

Michael Wittig

September 01, 2015
Tweet

Transcript

  1. Michael Wittig | tecRacer Datenbank am Limit: spaltenorientiert als Ausweg

  2. Was sind Finanzmarktdaten?

  3. 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
  4. Zeitreihen Was sind Finanzmarktdaten? Tick-Daten

  5. Volumen?

  6. durchschnittlich 5 Quotes / Sekunde Daimler Aktie maximal 200 Quotes

    / Sekunde
  7. Aktie Börse x10 Derivate Optionen x100 Futures x5 Index x3

    Ändert sich der Quote…
  8. On-Disk Repräsentation Wie speichert meine Datenbank die Daten?

  9. Record Disk BSON Padding http://docs.mongodb.org/manual/core/storage/

  10. Page Disk http://www.postgresql.org/docs/9.4/static/storage-page-layout.html Tuple Page Header Free Space

  11. zeilenorientierter Ansatz Zeit Käufer Verkäufer Lokalität

  12. Wir bauen eine zeilenorientierte Datenbank

  13. Einschränkung: Sortiert nach Zeit

  14. Tabelle => Ordner

  15. Zeile => Datei

  16. /Datenbank /Daimler_Quotes /1.dat /2.dat /3.dat /4.dat /5.dat

  17. /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
  18. /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
  19. /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
  20. /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
  21. Daten Volumen gelesen ~ 90 %

  22. None
  23. spaltenorientierter Ansatz Zeit Käufer Verkäufer Lokalität

  24. Wir bauen eine spaltenorientierte Datenbank

  25. Einschränkung: Sortiert nach Zeit

  26. Tabelle => Ordner

  27. Spalte => Datei

  28. /Datenbank /Daimler_Quotes /Zeit.dat /Käufer_Menge.dat /Käufer_Preis.dat /Verkäufer_Menge.dat /Verkäufer_Preis.dat

  29. /Datenbank /Daimler_Quotes /Zeit.dat /Käufer_Menge.dat /Käufer_Preis.dat /Verkäufer_Menge.dat /Verkäufer_Preis.dat SELECT Käufer_Preis FROM

    Daimler_Quotes WHERE Zeit>10:00:00
  30. /Datenbank /Daimler_Quotes /Zeit.dat /Käufer_Menge.dat /Käufer_Preis.dat /Verkäufer_Menge.dat /Verkäufer_Preis.dat SELECT Käufer_Preis FROM

    Daimler_Quotes WHERE Zeit>10:00:00
  31. /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
  32. /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
  33. Daten Volumen gelesen ~ 25 %

  34. Optimierung?

  35. Partition => Ordner

  36. /DaimlerQuotes /2015-01-01 /Zeit.dat, Käufer_Preis.dat, … /2015-01-02 /Zeit.dat, Käufer_Preis.dat, … /2015-01-03

  37. /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
  38. /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
  39. spaltenorientierte Vorteile • nur benötigte Partitionen lesen • nur benötigte

    Spalten lesen • Sortierung ausnutzen
  40. Spalte => Array

  41. „The layout of data structures in memory can have a

    significant impact on performance because of the architecture of caches in modern processors.“ Evolution and Practice: Low-latency Distributed Applications in Finance, ACM Queue, Volume 13, issue 4 http://queue.acm.org/detail.cfm?ref=rss&id=2770868
  42. http://www.benstopford.com/2015/04/28/elements-of-scale-composing-and-scaling-data-platforms/

  43. Wie analysieren die größten Finanzinstitute der Welt Zeitreihen?

  44. None
  45. Was ist kdb+? • In-Memory Datenbank mit Persistenzschicht • Spaltenorientiert

    • Abfragesprache Q oder Q-SQL • Daten liegen im Speicher, in Transit und auf Festplatte im selben Format vor
  46. 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
  47. Was kdb+ nicht ist • normale Datenbank • weit verbreitet

  48. Echtzeit und Historie

  49. kdb+tick Quote Pub/Sub System aktueller Tag Historie (< aktueller Tag)

    00:00:00
  50. 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)
  51. Chains Quote 10 Sekunden Aggregation 15 Minuten Aggregation Tages Volumen

    Tages Hoch/Tief Konsument
  52. 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
  53. Historische Datenbank • beinhaltet alle Daten, die älter als der

    aktuelle Tag sind
  54. Demo

  55. http://kx.com kostenlose 32 bit Testversion

  56. http://manning.com/wittig Michael Wittig mwittig@tecracer.de SaaS Zeitreihendatenbank TimeSeries.Guru 39% Rabatt Code

    39wittig
  57. Alternativen?

  58. None
  59. Amazon Redshift Amazon Kinesis