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

Datenbank am Limit – Spaltenorientierung als Ausweg

Datenbank am Limit – Spaltenorientierung 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 Tickdata-Systeme wird beleuchtet. Der Vortrag endet mit dem Beispiel einer technischen Implementierung für Finanzmarktdaten.

E8f66870d1204779ecc45f2695faa73e?s=128

Michael Wittig

December 16, 2015
Tweet

Transcript

  1. Michael Wittig | tecRacer Datenbank am Limit Spaltenorientiert als Ausweg

  2. SELECT Datum, … FROM … WHERE Symbol='Daimler' AND Datum>=2015.01.01 AND

    Zeit BETWEEN 11:00:00 AND 13:00:00 GROUP BY Datum
  3. 1. Domäne „Finanzmarkt“ 3. spaltenorientierte Datenbank kdb+ 4. echtzeit Datenbank

    kdb+tick 2. (On-Disk) Repräsentation von Daten
  4. Was sind Finanzmarktdaten?

  5. 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 sortiert, unregelmäßig
  6. Zeitreihen Was sind Finanzmarktdaten? Tick-Daten

  7. Volumen?

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

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

    Ändert sich der Quote…
  10. append only

  11. On-Disk Repräsentation Wie speichert meine Datenbank die Daten?

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

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

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

  15. Wir bauen eine zeilenorientierte Datenbank

  16. Einschränkung: Sortiert nach Zeit

  17. Tabelle => Ordner

  18. Zeile => Datei

  19. /Datenbank /Daimler_Quotes /1.dat /2.dat /3.dat /4.dat /5.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
  21. /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
  22. /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
  23. /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
  24. Daten Volumen gelesen ~ 90 %

  25. None
  26. spaltenorientierter Ansatz Zeit Käufer Verkäufer Lokalität

  27. Wir bauen eine spaltenorientierte Datenbank

  28. Einschränkung: Sortiert nach Zeit

  29. Tabelle => Ordner

  30. Spalte => Datei

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

  32. /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
  33. /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
  34. /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
  35. /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
  36. Daten Volumen gelesen ~ 25 %

  37. Optimierung?

  38. Partition => Ordner

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

  40. /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
  41. /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
  42. spaltenorientierte Vorteile • nur benötigte Partitionen lesen • nur benötigte

    Spalten lesen • Sortierung ausnutzen
  43. Spalte => Array

  44. „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
  45. http://www.benstopford.com/2015/04/28/elements-of-scale-composing-and-scaling-data-platforms/

  46. Wie verarbeiten die größten Finanzinstitute der Welt Zeitreihen?

  47. None
  48. 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
  49. 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
  50. Demo

  51. Was kdb+ nicht ist • transaktional • 100% SQL kompatibel

    • weit verbreitet
  52. Echtzeit und Historie

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

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

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

    aktuelle Tag sind
  58. Demo

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

  60. Unter allen Tweets zu #AWSinAction wird ein eBook verlost! https://manning.com/wittig

    39% Rabatt Code ctwittage
  61. Michael Wittig mwittig@tecracer.de SaaS Zeitreihendatenbank TimeSeries.Guru @hellomichibye michaelwittig michaelwittig

  62. Alternativen?

  63. None
  64. Amazon Redshift Amazon Kinesis