Share
Embed
Time-series-database-world
時系列データベース界について適当に喋りました
Slide source is here: https://github.com/rrreeeyyy/talks/blob/29efd49d4aff915fde403ef9dd305b0b9d9f3b9d/20161013/time-series-database-world/presentation.md
rrreeeyyy
October 13, 2016
Transcript
24 slides
-
Time series database (TSDB) ͱ • ࣌ܥྻσʔλΛ֨ೲ͢ΔతʹಛԽͨ͠σʔλϕʔε • ࣌ܥྻσʔλ: ࣌ؒͰมԽ͢Δ࿈ଓతͳͷ͜ͱ
• IoT ػث͕ൃల͖ͯͯ͠ྲྀߦͬͯΔײ͕͋Δ • ཧαʔό૿ՃɾϝτϦΫεͷߴղೳԽͳͲͰ • ΠϯϑϥΤϯδχΞతͳ؍Ͱ͢ hbstyle 2016/10/13 - Yoshikawa Ryota ( @rrreeeyyy ) 2 -
Round Robin Database (RRD) • ੲ͔Β͋Δγϯϓϧͳ࣌ܥྻσʔλϕʔε • ࣌ܥྻσʔλϕʔεΛֶͿʹஸΑ͍ • γϯϓϧͳͷͰ͔Γ͍͢
• σʔλϑΥʔϚοτ͕ͱͯγϯϓϧ • ݹ͍σʔλͷॲཧํ๏ؙΊࠐΈΛ͢Δɾ্ॻ͖͢Δ • rrdtool ίϚϯυਓؒʹগ͍͠͠ؾ͕͢Δ hbstyle 2016/10/13 - Yoshikawa Ryota ( @rrreeeyyy ) 4 -
round robin database file format 1 +-------------------------------+ | RRD Header
| |-------------------------------| | DS Header (one per DS) | |-------------------------------| | RRA Header (one per RRA) | |===============================| < 1 kByte (normally) | RRA Data Area (first RRA) | ................................. The bulk of the space | RRA Data Area (last RRA) | +-------------------------------+ > 1 h$p:/ /oss.oe,ker.ch/rrdtool-trac/wiki/TuningRRD hbstyle 2016/10/13 - Yoshikawa Ryota ( @rrreeeyyy ) 5 -
rrdtool graph command example 2 $ rrdtool graph ./graph.png \
--start="1360892438-1w" \ --end="1360892438+1w" \ --imgformat=PNG \ --title="Load Average (1min)" \ --height=200 \ --width=500 \ --lower-limit=0 \ DEF:load=test.rrd:load_1min:MAX \ VDEF:a=load,LSLSLOPE \ VDEF:b=load,100,PERCENTNAN \ CDEF:predict=load,POP,a,COUNT,*,b,+ \ SHIFT:predict:604800 \ AREA:load#CC0000:"Load Average (1min)" \ LINE1:predict#00CC00:"Predict" \ LINE2:2#CCCCCC:"Limit" \ 2 h$ps:/ /heartbeats.jp/hbblog/2013/02/predict-rrdtool.html hbstyle 2016/10/13 - Yoshikawa Ryota ( @rrreeeyyy ) 6 -
Graphite(whisper) • RRD ͷ՝Λղܾ͢ΔͨΊʹॻ͔Εͨ 3 • σʔλߏͳͲ RRD ʹׂͱࣅ͍ͯΔ •
carbon graphite-web ͳͲͷσʔϞϯͱڠௐͯ͠ಈ͘ • ωοτϫʔΫܦ༝Ͱͷσʔλॻ͖ࠐΈɾಡΈग़͕͠ग़དྷΔ • 2016 ݱࡏͰओྲྀʹ͍ۙͰ͋Ζ͏ TSDB • Grafana ͷՄࢹԽπʔϧॆ࣮͍ͯ͠Δ 3 h$p:/ /graphite.wikidot.com/whisper hbstyle 2016/10/13 - Yoshikawa Ryota ( @rrreeeyyy ) 7 -
Whisper file format 4 4 h$p:/ /www.aosabook.org/en/graphite.html hbstyle 2016/10/13 -
Yoshikawa Ryota ( @rrreeeyyy ) 8 -
TSDB ʹඞཁʹͳ͖ͬͯͨ͜ͱ • ॻ͖ࠐΈཁٻΛߴʹࡹ͚Δ͜ͱ • ॻ͖ࠐΈࣗମ͕ߴͰ͋Δඞཁ͋·Γͳ͍ • ߴ͍σʔλѹॖ • σʔλྔ͕
RDBMS ʹൺͯେྔʹͳΔͷͰѹॖ͕ඞཁ • ಛఆͷੈผʹύʔδͳͲߦ͏ඞཁ͕͋Δ • ࣌ܥྻσʔλΛ(ߴʹ)౷ܭॲཧग़དྷΔ͜ͱ • ౷ܭॲཧΛߦ͏ݴޠ͔Γ͍͢ͱͳ͓ྑ͍ • ࣌ܥྻσʔλϕʔεࣗମͷੑͷ֬อ hbstyle 2016/10/13 - Yoshikawa Ryota ( @rrreeeyyy ) 9 -
Ͳ͏ͬͯબͿ͔ • વࣗͷ༻్ʹԠͯ͡બͿ • ॻ͖ࠐΈʁ • ಡΈࠐΈʁ • σʔλѹॖʁ •
౷ܭΫΤϦͷॻ͖͢͞ʁ • ӡ༻͢͠͞ʁ • શ෦ཉ͍͠ͷ͔Δ͕ඞཁʹԠͯ͡औࣺબ͢Δ hbstyle 2016/10/13 - Yoshikawa Ryota ( @rrreeeyyy ) 12 -
ۙͷ࣌ܥྻσʔλϕʔεͨͪ • ιϑτΣΞֶతͳݟ͔Βઃܭ͍ͯ͠͠Δࣄ͕ଟ͍ • σʔλѹॖʹͪΌΜͱࠩූ߸ԽΛ͏ͱ͔ • λΠϜελϯϓͷΔ ͕ಉ͡ʹͳΓ͍͢͜ͱʹண • ϝτϦΫεࣅͨΑ͏ͳΛਪҠ͍͢͜͠ͱʹண
• ॻ͖ࠐΈཁٻΛߴʹॲཧ͢ΔͨΊʹ SEDA Λ࠾༻͢Δͱ͔ • Խػߏʹ Paxos, Ra/ Λ͏ͱ͔ • σʔλߏʹಠࣗͷ Memory Map LSM-based ͳߏ CoW tree Λ͏ͱ͔ • ෦ߏΛਖ਼͓ͬͯ͘͘͜͠ͱͰͲ͏͍͏ಛੑ͕͋Δ͔͔Δ hbstyle 2016/10/13 - Yoshikawa Ryota ( @rrreeeyyy ) 13 -
Time series databases • ࠷ۙจͱ͔υΩϡϝϯτΛಡΜͩ 3 ͭͷ TSDB Λհ •
Gorilla • h/p:/ /www.vldb.org/pvldb/vol8/p1816-teller.pdf • InfluxDB • h/ps:/ /www.influxdata.com/ • BtrDB • h/p:/ /btrdb.io/ hbstyle 2016/10/13 - Yoshikawa Ryota ( @rrreeeyyy ) 14 -
Gorilla 6 • Facebook ͷ։ൃ͍ͯ͠Δ TSDB • ΠϯϑϥͷϝτϦΫεऔಘͷͨΊʹ͍ͬͯΔΒ͍͠ • 2013
ʹ HBase-based ͳ TSDB Λஔ͖͑ΔͨΊʹ࡞ΒΕͨ • Timestamp, Value(float) ͦΕͧΕʹѹॖΞϧΰϦζϜΛ͍࣋ͬͯΔ • ϝϞϦ্ͷσʔλߏ(TSmap) ಠࣗʹ͍࣋ͬͯΔ • Խػߏ(Paxos ϕʔεͷͷ) ͕උΘ͍ͬͯΔ • CorrelaEon(PPMCC)/CharEng/AggregaEons ͷػೳ͋ΔͬΆ͍ 6 h$p:/ /www.vldb.org/pvldb/vol8/p1816-teller.pdf hbstyle 2016/10/13 - Yoshikawa Ryota ( @rrreeeyyy ) 15 -
Gorilla requiremets • ઃܭ࣌ͷཁٻ༷ (refs: 2.2 Gorilla requirements) • Ωʔͷ
20 ԯ • ຖ 7 ԯͷσʔλϙΠϯτ(= 9mestamp,value) ͕Ճ͞ΕΔ • σʔλ 26 ࣌ؒอ࣋ • ϐʔΫ࣌ʹ 40000/sec ΫΤϦ • ࣌ܥྻσʔλͷཻ 15 ඵ·Ͱαϙʔτ • : hbstyle 2016/10/13 - Yoshikawa Ryota ( @rrreeeyyy ) 16 -
InfluxDB • InfluxData ͕ࣾ࡞͍ͬͯΔ Golang ͷ TSDB • 0.9.5 ͔ΒಠࣗͷετϨʔδΤϯδϯΛ։ൃ͍ͯ͠Δ
7 • Time Structured Merge Tree • LSM-tree ϕʔε͕ͩ࣌ܥྻσʔλ༻ʹΧελϚΠζ 8 • σʔλܕࣗ༝Ͱ Bool, Integer, String σʔλܕ͝ͱʹѹॖΞϧΰϦζϜ͕͋Δ • Float, Integer ͷѹॖख๏ Gorilla ͱಉ͡ • String ʹ Snappy ѹॖΛ༻͍ͯ͠Δ • Query language SQL-like ͳ InfluxQLɻͦΕͳΓʹૣ͍͠ѻ͍͍͢ɻ 8 h$ps:/ /speakerdeck.com/pauldix/influxdbs-new-storage-engine-the-=me-structured-merge-tree 7 h$ps:/ /docs.influxdata.com/influxdb/v1.0/concepts/storage_engine hbstyle 2016/10/13 - Yoshikawa Ryota ( @rrreeeyyy ) 18 -
BtrDB 9 • Berkeley Tree DataBase (FAST '16 Ͱൃද͞Ε͍ͯͨ 10)
• Golang Ͱॻ͔Ε͍ͯΔ • σʔλߏ CoW tree Λ͍ͬͯΔ • Max/Min/Avg Λอ࣋ͨ͠ΓੈΛอ࣋ͨ͠Γ͍ͯ͠Δ • SEDA architecture Λ࠾༻͍ͯ͠Δ༷ • Request stage ͱ Read/Write stage ͕͋Δ • Block storage ʹ Ceph αϙʔτ͕͋Δ 10 h%ps:/ /www.usenix.org/system/files/conference/fast16/fast16-papers-andersen.pdf 9 h$p:/ /btrdb.io/ hbstyle 2016/10/13 - Yoshikawa Ryota ( @rrreeeyyy ) 20 -
·ͱΊͱײ • ੲ͔Β͋Δ TSDB ʙ ࠷ۙͷ TSDB Λ؆୯ʹհ • TSDB
ʹٻΊΒΕ͍ͯΔࣄͱ࠷ۙͷ TSDB ͕Ͳ͏ରԠ͍ͯ͠Δ͔հ • ෦ߏͷυΩϡϝϯτɾจΛಡΉͱڍಈ͕ਪͰ͖ͯ໘ന͍ • ྫ͑ BtrDB ౷ܭॲཧ͕݁ߏૣͦ͏ɺͳͲ • ٯʹσʔλѹॖͦΜͳʹٻΊͯແͦ͞͏ • ෦ߏ͕͔ΔͱٻΊΔͷʹԠͯ͡ྑ͍ TSDB ΛબΔΑ͏ʹͳΓͦ͏ • ಡΜͰͯษڧʹͳΔ͠໘ന͍ͷͰΈΜͳಡΈ·͠ΐ͏ hbstyle 2016/10/13 - Yoshikawa Ryota ( @rrreeeyyy ) 23 -
ࢀߟจݙ • h#p:/ /oss.oe+ker.ch/rrdtool-trac/wiki/TuningRRD • h#ps:/ /heartbeats.jp/hbblog/2013/02/predict-rrdtool.html • h#p:/ /graphite.wikidot.com/whisper
• h#p:/ /blog.yuuk.io/entry/high-performance-graphite • h#p:/ /www.aosabook.org/en/graphite.html • h#ps:/ /docs.google.com/spreadsheets/d/1sMQe9oOKhMhIVw9WmuCEWdPtAoccJ4a-IuZv4fXDHxM • h#p:/ /www.vldb.org/pvldb/vol8/p1816-teller.pdf • h#ps:/ /docs.influxdata.com/influxdb/v1.0/concepts/storage_engine • h#ps:/ /speakerdeck.com/pauldix/influxdbs-new-storage-engine-the-+me-structured-merge-tree • h#p:/ /btrdb.io/ • h#ps:/ /www.usenix.org/system/files/conference/fast16/fast16-papers-andersen.pdf hbstyle 2016/10/13 - Yoshikawa Ryota ( @rrreeeyyy ) 24