SlideShare a Scribd company logo
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
InfluxDB の概要
June 27th, 2014
!
Naotoshi Seo @sonots

DeNA Co., Ltd.
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
2
自己紹介
・瀬尾 直利 @sonots
・DeNA Co., Ltd
・インフラのDev
・Rubyist
・OSS 活動家
・Fluentd コミッタ
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
⁃ ログを処理するアプリケーション(or フレームワーク)
⁃ Ruby プラグインの仕組みが強力 (+250 plugins)
⁃ InfluxDB との連携もできます!(fluent-plugin-influxdb)
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
⁃ グラフツール
⁃ HTTP POST するだけ
⁃ ストレージは RRDtool
http://kazeburo.github.io/GrowthForecast/
GrowthForecast
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
http://blog.livedoor.jp/sonots/archives/29646713.html
Yohoushi
!
分散 GrowthForecast グラフツール
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
・
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
7
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
8
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
免責事項
9
!
⁃ 対象バージョンは v0.7
⁃ 今後いろいろ変わる可能性があります
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
InfluxDB
10
!
⁃ 時系列データベースの1つ
⁃ 時系列データを格納するのに適したデータベース
⁃ メトリクスやイベントの保存や解析に便利
⁃ Paul, Todd, John の三人がフルタイムで開発して
いる (Y Combinator の出資を受けている)
⁃ golang
⁃ 2013年の Open Source Rookies に選ばれた
http://influxdb.com/
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
InfluxDB の特徴
11
!
!
• バックエンドに LevelDB を使っている
※ 抽象レイヤーもできました
• HTTP API でクエリを投げる
• database と series (RDBMS でいう table
のようなもの) の2階層
• スキーマレス
• 分散ストレージ
• (やたらと)豊富なクライアントライブラリ
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
豊富なクライアントライブラリ
12
• JavaScript
• Ruby
• Python
• Node.js
• PHP
• Java
• Clojure
http://influxdb.com
• Common Lisp
• Go
• Scala
• R
• Perl (by @hirose31)
• Haskell
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
時系列データベース
何に使うの?
13
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
何に使うか(具体例)
14
!
• システムメトリクスの保存
• アクセスログの集計や解析
• RRDtool の置き換え
• MySQL でやっている時系列データ解析置き換え
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
時系列データベース一覧
15
http://en.wikipedia.org/wiki/Time_series_database より
• Druid
• Geras
• InfluxDB
• KairosDB
• KDB+
• OpenTSDB
• SiteWhere
• TempoDB
• Treasure Data(?)
• RRDtool
• Graphite
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
HTTP API
16
データ登録、データ取り出し
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
データ登録
17
!
POST to /db/<database>/series?
u=<user>&p=<pass>.
[
{
"name" : "hd_used",
"columns" : ["time", "value", "host"],
"points" : [
[1400425947368, 23.2, "serverA"]
]
}
]
request body ※ timeを指定しない場合は現在時間
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
クエリ
18
!
GET to /db/<database>/series?
q=<query>&u=<user>&p=<pass>.
select * from log_lines limit 1
<query>
response body
[
{
"name": "log_lines",
"columns": ["time", "sequence_number", "line"],
"points": [
[1400425947368, 287780001, "here's some useful log info"]
]
}
]
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
クエリサンプル
19
InfluxDB をちょっとさわってみた - (ひ)メモ
http://d.hatena.ne.jp/hirose31/20140404/1396596668
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
時刻で範囲指定
20
[
{
"columns": ["time","sequence_number","reqtime","url"],
"name": "web9999.httpd",
"points": [
["1392030886","60703580001","0.21","/view/entry"],
["1392030885","60703560001","0.07","/login/error"],
["1392030884","60703540001","0.32","/login/"],
...
]
}
]
select reqtime, url from web9999.httpd
where time > now() - 1h limit 1000;
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
値で絞り込み(where)
21
[
{
"columns": ["time","sequence_number","reqtime","url"],
"name": "web9999.httpd",
"points": [
["1392030885","60703560001","0.07","/login/error"],
["1392030884","60703540001","0.32","/login/"],
["1392030881","60703480001","0.78","/login/error"],
...
]
}
]
select reqtime, url from web9999.httpd
where reqtime > 2.5;
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
値で絞り込み(正規表現)
22
[
{
"columns": ["time","sequence_number","reqtime","url"],
"name": "web9999.httpd",
"points": [
["1392030883","60703520001","2.81","/list/entry"],
["1392030878","60703420001","2.72","/view/entry"],
["1392030877","60703400001","2.94","/login/error"],
...
]
}
]
select reqtime, url from web9999.httpd
where url =~ /^/login//;
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
複数Series指定(正規表現)
23
[
{
"columns": ["time","sequence_number","sys","user"],
"name": "web9999.cpu",
"points":[
["1392030886","60703590001",3,57],
["1392030885","60703570001",9,1],
["1392030884","60703550001",28,42],
...
]
}
{
"columns": ["time","sequence_number","reqtime","url"],
"name": "web9999.httpd",
"points": [
["1392030886","60703580001","0.21","/view/entry"],
["1392030885","60703560001","0.07","/login/error"],
["1392030884","60703540001","0.32","/login/"],
...
]
}
]
select * from /web9999..*/;
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
複数Seriesへの問い合わせを
Mergeする
24
[
{
"columns": ["time","sequence_number","reqtime","url","_orig_series"],
"name": "web9999.httpd_merge_web0001.httpd",
"points": [
["1392030886","60706000001","1.09","/view/entry","web0001.httpd"],
["1392030886","60703580001","0.21","/view/entry","web9999.httpd"],
["1392030885","60705980001","1.53","/login/error","web0001.httpd"],
...
]
}
]
select reqtime, url from web9999.httpd
merge web0001.httpd;
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
group by (ダウンサンプリング)
25
select mean(sys) from web9999.cpu
group by time(15m);
15分ごとの平均値!
╭( ・ㅂ・)‫و‬ ̑̑
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
使える Statement
26
!
• Group by
• Merge (series を複数指定して結果をマージする機能)
• Limit
• Join
• Order (time フィールド専用の Order by)
• Explain
╭( ・ㅂ・)‫و‬ ̑̑
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
使えない Statement
27
!
• Having
• サブクエリ
• Order by (今はまだカラムにインデックス利かないので...)
!
( ・᷄д・᷅ )
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
使える集約関数
28
!
• Count, Min, Max, Mean, Mode, Median
• Distinct
• Percentile, Histogram, Derivative
• Sum, Stddev, First/Last
• DIfference, Top/Bottom (v0.6)
!
Derivative (時間微分) とか便利
╭( ・ㅂ・)‫و‬ ̑̑
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
使えない集約関数
29
!
• 豊富な Built-In 集約関数
• ユーザ定義できない (UDFの仕組みがない)
( ・᷄д・᷅ )
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
Advanced
30
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
Continuous Query
31
select percentile(value, 95) from
response_times group by time(5m)
into response_times.percentiles.5m.95;
!
select count(type) from events
group by time(10m), type
into events.count_per_type.10m;
クエリをあらかじめ仕込んでおくと、 逐次
的にデータを別のSeriesに格納してくれる
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
Fanout Continuous Query
32
select * from events into events.[page_id];
• 格納先 Series の名前が動的に定まる
• Seriesを分けてインデックス代わりにす
るための機能
※ group by, join, merge, where と一緒に使えません
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
Administration
33
• 3つのロール
• Cluster Admin
• データベースを追加削除できる
• Database admin と user を追加削除できる
• クエリは投げれない
• Database Admin
• Database admin と user を追加削除できる
• write/read パーミッションを変更できる
• Database User
• カレントデータベースを読み書きできる
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
Graphite Protocol
34
http://influxdb.com/blog/2014/03/24/influxdb_v0_5_0_ready_for_production.html
• Input Plugin をサポート
• もう、HTTP だけじゃない
• Graphite Plugin
• UDP Plugin
• Graphite (欧米で人気) をすでに使っているシス
テムを InfluxDB に移行しやすくする狙い
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
Abstract Storage Engines
35
https://github.com/influxdb/influxdb/tree/master/src/datastore/storage
http://influxdb.com/blog/2014/06/20/
leveldb_vs_rocksdb_vs_hyperleveldb_vs_lmdb_performance.html
抽象レイヤーが入ってLevelDBだけじゃなくなった
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
クラスタリング/Shard
36
• ドキュメントがない\(^o^)/
• config_sample.toml に設定項目はある
@chobi_e さんの発表に期待(・ω<) テヘペロ
※ 後記:こちらです https://speakerdeck.com/chobie/influxdb-internals-1
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
思ったこと /
気になったことツラツラ
37
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
38
• カラムにインデックス利かないので遅い
• LevelDB だと key (id,時間,sequence) に
しかインデックスきかない
• 集約関数は豊富だけど UDF 定義できない
• Having, サブクエリ, Order by 使えない...
• RRDtool のように古いデータを自動で消す事はで
きないのでバッチで消す...?
思ったこと
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
Future
39
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
Binary Protocol
40
!
!
• Protobuf / Msgpack / BSON
• Asynchronisity
• PubSub
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
PubSub Interface
41
!
!
• クエリを subscribe しておくと、
• データが入ってくるようなインターフェース
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
Column Indexes
42
!
!
• カラムにインデックス貼りたい!
• タグカラムを用意したいらしい
• データにタグを貼る
• ついでに、1カラムに複数データを入れられる
Array 型もサポートしたいらしい
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
Shard Spaces and
Retention Policies
43
!
• 保持期間を決めてそれが過ぎたらデータを捨てる
• RRDtool 的な(ry
shardSpaces = [
!
{name: "raw", retention: "4h"},
!
{name: "week", retention: "7d"},
!
{name: "month", retention: "30d"},
!
{name: "year", retention: "365d"},
!
{name: "keep", retention: "inf"}
!
]
// apply these rules for shard spaces
!
rules = [{
"database": "metricsDB",
!
"mappings": [
!
{"space": "week", "regex": "^week.*"},
!
{"space": "month", "regex": "^month.*"},
!
{"space": "year", "regex": "^year.*"},
!
{"space": "keep", "regex": "^keep.*"},
!
{"space": "raw", "regex": ".*"}
!
]
}]
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
Custom Function
44
!
!
• ユーザ定義関数 (UDF)
• Lua Scripts ...
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
Security Enhancements
45
!
!
• where custom_id = 3 にマッチするデータ
だけ許可とか {
"readPermissions": [
{
"matcher": ".*"
},
{
"name": "customer_events",
"whereClause": "where customer_id = 3"
}
],
"writePermissions": [
{
"name": "customer_events",
"valueRestrictions": {
"customer_id": 3
}
}
]
}
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
Merging Many Series into One
46
!
• select * from merge /stats.*/
• 正規表現で指定できるようにしたいらしい
!
※ 下のような merge はすでにできる
select * from series1 merge series2
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
(ついでに)
ダッシュボード紹介
47
Elasticsearch に対する Kibana のような
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
Built-In Interface
48
※おもちゃです
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
Grafana
49
Kibana の fork。元は Graphite 用
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
Influga
50
@hakobera 氏が作ってる便利そうなやつ :D
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
まとめ 
51
• InfluxDB の概要を説明しました
• Input Plugin の仕組みが出来て、HTTP API だけ
ではなく、Graphite, UDP でもデータ投入できる
• group by, join は使えるが、having, サブクエリ,
order by などはまだ使えない
• 抽象ストレージレイヤーができたのでストレージによっ
てはカラムにインデックスが利くようになるかも
• Future に期待
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
52
Thank you
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
Appendix: 情報源
53
• デザインゴール
• http://influxdb.com/docs/v0.7/introduction/overview.html
• https://github.com/influxdb/influxdb/blob/master/design_notes.md
• config_sample.toml
• https://github.com/influxdb/influxdb/blob/master/config.sample.toml
• 設定ファイルを読むとドキュメントに書いてないようなのが書いてあったり....
• Community
• http://influxdb.com/community
• メーリングリストに入って、@jvshahid, @toddpersen, and
@pauldix の三人を follow しておくとよさそう
• Paul Dix - Internals of InfluxDB
• http://pivotallabs.com/paul-dix-internals-influxdb/

More Related Content

InfluxDB の概要 - sonots #tokyoinfluxdb

  • 1. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. InfluxDB の概要 June 27th, 2014 ! Naotoshi Seo @sonots
 DeNA Co., Ltd.
  • 2. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 2 自己紹介 ・瀬尾 直利 @sonots ・DeNA Co., Ltd ・インフラのDev ・Rubyist ・OSS 活動家 ・Fluentd コミッタ
  • 3. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. ⁃ ログを処理するアプリケーション(or フレームワーク) ⁃ Ruby プラグインの仕組みが強力 (+250 plugins) ⁃ InfluxDB との連携もできます!(fluent-plugin-influxdb)
  • 4. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. ⁃ グラフツール ⁃ HTTP POST するだけ ⁃ ストレージは RRDtool http://kazeburo.github.io/GrowthForecast/ GrowthForecast
  • 5. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. http://blog.livedoor.jp/sonots/archives/29646713.html Yohoushi ! 分散 GrowthForecast グラフツール
  • 6. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. ・
  • 7. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 7
  • 8. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 8
  • 9. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 免責事項 9 ! ⁃ 対象バージョンは v0.7 ⁃ 今後いろいろ変わる可能性があります
  • 10. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. InfluxDB 10 ! ⁃ 時系列データベースの1つ ⁃ 時系列データを格納するのに適したデータベース ⁃ メトリクスやイベントの保存や解析に便利 ⁃ Paul, Todd, John の三人がフルタイムで開発して いる (Y Combinator の出資を受けている) ⁃ golang ⁃ 2013年の Open Source Rookies に選ばれた http://influxdb.com/
  • 11. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. InfluxDB の特徴 11 ! ! • バックエンドに LevelDB を使っている ※ 抽象レイヤーもできました • HTTP API でクエリを投げる • database と series (RDBMS でいう table のようなもの) の2階層 • スキーマレス • 分散ストレージ • (やたらと)豊富なクライアントライブラリ
  • 12. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 豊富なクライアントライブラリ 12 • JavaScript • Ruby • Python • Node.js • PHP • Java • Clojure http://influxdb.com • Common Lisp • Go • Scala • R • Perl (by @hirose31) • Haskell
  • 13. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 時系列データベース 何に使うの? 13
  • 14. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 何に使うか(具体例) 14 ! • システムメトリクスの保存 • アクセスログの集計や解析 • RRDtool の置き換え • MySQL でやっている時系列データ解析置き換え
  • 15. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 時系列データベース一覧 15 http://en.wikipedia.org/wiki/Time_series_database より • Druid • Geras • InfluxDB • KairosDB • KDB+ • OpenTSDB • SiteWhere • TempoDB • Treasure Data(?) • RRDtool • Graphite
  • 16. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. HTTP API 16 データ登録、データ取り出し
  • 17. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. データ登録 17 ! POST to /db/<database>/series? u=<user>&p=<pass>. [ { "name" : "hd_used", "columns" : ["time", "value", "host"], "points" : [ [1400425947368, 23.2, "serverA"] ] } ] request body ※ timeを指定しない場合は現在時間
  • 18. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. クエリ 18 ! GET to /db/<database>/series? q=<query>&u=<user>&p=<pass>. select * from log_lines limit 1 <query> response body [ { "name": "log_lines", "columns": ["time", "sequence_number", "line"], "points": [ [1400425947368, 287780001, "here's some useful log info"] ] } ]
  • 19. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. クエリサンプル 19 InfluxDB をちょっとさわってみた - (ひ)メモ http://d.hatena.ne.jp/hirose31/20140404/1396596668
  • 20. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 時刻で範囲指定 20 [ { "columns": ["time","sequence_number","reqtime","url"], "name": "web9999.httpd", "points": [ ["1392030886","60703580001","0.21","/view/entry"], ["1392030885","60703560001","0.07","/login/error"], ["1392030884","60703540001","0.32","/login/"], ... ] } ] select reqtime, url from web9999.httpd where time > now() - 1h limit 1000;
  • 21. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 値で絞り込み(where) 21 [ { "columns": ["time","sequence_number","reqtime","url"], "name": "web9999.httpd", "points": [ ["1392030885","60703560001","0.07","/login/error"], ["1392030884","60703540001","0.32","/login/"], ["1392030881","60703480001","0.78","/login/error"], ... ] } ] select reqtime, url from web9999.httpd where reqtime > 2.5;
  • 22. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 値で絞り込み(正規表現) 22 [ { "columns": ["time","sequence_number","reqtime","url"], "name": "web9999.httpd", "points": [ ["1392030883","60703520001","2.81","/list/entry"], ["1392030878","60703420001","2.72","/view/entry"], ["1392030877","60703400001","2.94","/login/error"], ... ] } ] select reqtime, url from web9999.httpd where url =~ /^/login//;
  • 23. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 複数Series指定(正規表現) 23 [ { "columns": ["time","sequence_number","sys","user"], "name": "web9999.cpu", "points":[ ["1392030886","60703590001",3,57], ["1392030885","60703570001",9,1], ["1392030884","60703550001",28,42], ... ] } { "columns": ["time","sequence_number","reqtime","url"], "name": "web9999.httpd", "points": [ ["1392030886","60703580001","0.21","/view/entry"], ["1392030885","60703560001","0.07","/login/error"], ["1392030884","60703540001","0.32","/login/"], ... ] } ] select * from /web9999..*/;
  • 24. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 複数Seriesへの問い合わせを Mergeする 24 [ { "columns": ["time","sequence_number","reqtime","url","_orig_series"], "name": "web9999.httpd_merge_web0001.httpd", "points": [ ["1392030886","60706000001","1.09","/view/entry","web0001.httpd"], ["1392030886","60703580001","0.21","/view/entry","web9999.httpd"], ["1392030885","60705980001","1.53","/login/error","web0001.httpd"], ... ] } ] select reqtime, url from web9999.httpd merge web0001.httpd;
  • 25. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. group by (ダウンサンプリング) 25 select mean(sys) from web9999.cpu group by time(15m); 15分ごとの平均値! ╭( ・ㅂ・)‫و‬ ̑̑
  • 26. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 使える Statement 26 ! • Group by • Merge (series を複数指定して結果をマージする機能) • Limit • Join • Order (time フィールド専用の Order by) • Explain ╭( ・ㅂ・)‫و‬ ̑̑
  • 27. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 使えない Statement 27 ! • Having • サブクエリ • Order by (今はまだカラムにインデックス利かないので...) ! ( ・᷄д・᷅ )
  • 28. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 使える集約関数 28 ! • Count, Min, Max, Mean, Mode, Median • Distinct • Percentile, Histogram, Derivative • Sum, Stddev, First/Last • DIfference, Top/Bottom (v0.6) ! Derivative (時間微分) とか便利 ╭( ・ㅂ・)‫و‬ ̑̑
  • 29. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 使えない集約関数 29 ! • 豊富な Built-In 集約関数 • ユーザ定義できない (UDFの仕組みがない) ( ・᷄д・᷅ )
  • 30. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Advanced 30
  • 31. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Continuous Query 31 select percentile(value, 95) from response_times group by time(5m) into response_times.percentiles.5m.95; ! select count(type) from events group by time(10m), type into events.count_per_type.10m; クエリをあらかじめ仕込んでおくと、 逐次 的にデータを別のSeriesに格納してくれる
  • 32. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Fanout Continuous Query 32 select * from events into events.[page_id]; • 格納先 Series の名前が動的に定まる • Seriesを分けてインデックス代わりにす るための機能 ※ group by, join, merge, where と一緒に使えません
  • 33. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Administration 33 • 3つのロール • Cluster Admin • データベースを追加削除できる • Database admin と user を追加削除できる • クエリは投げれない • Database Admin • Database admin と user を追加削除できる • write/read パーミッションを変更できる • Database User • カレントデータベースを読み書きできる
  • 34. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Graphite Protocol 34 http://influxdb.com/blog/2014/03/24/influxdb_v0_5_0_ready_for_production.html • Input Plugin をサポート • もう、HTTP だけじゃない • Graphite Plugin • UDP Plugin • Graphite (欧米で人気) をすでに使っているシス テムを InfluxDB に移行しやすくする狙い
  • 35. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Abstract Storage Engines 35 https://github.com/influxdb/influxdb/tree/master/src/datastore/storage http://influxdb.com/blog/2014/06/20/ leveldb_vs_rocksdb_vs_hyperleveldb_vs_lmdb_performance.html 抽象レイヤーが入ってLevelDBだけじゃなくなった
  • 36. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. クラスタリング/Shard 36 • ドキュメントがない\(^o^)/ • config_sample.toml に設定項目はある @chobi_e さんの発表に期待(・ω<) テヘペロ ※ 後記:こちらです https://speakerdeck.com/chobie/influxdb-internals-1
  • 37. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 思ったこと / 気になったことツラツラ 37
  • 38. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 38 • カラムにインデックス利かないので遅い • LevelDB だと key (id,時間,sequence) に しかインデックスきかない • 集約関数は豊富だけど UDF 定義できない • Having, サブクエリ, Order by 使えない... • RRDtool のように古いデータを自動で消す事はで きないのでバッチで消す...? 思ったこと
  • 39. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Future 39
  • 40. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Binary Protocol 40 ! ! • Protobuf / Msgpack / BSON • Asynchronisity • PubSub
  • 41. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. PubSub Interface 41 ! ! • クエリを subscribe しておくと、 • データが入ってくるようなインターフェース
  • 42. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Column Indexes 42 ! ! • カラムにインデックス貼りたい! • タグカラムを用意したいらしい • データにタグを貼る • ついでに、1カラムに複数データを入れられる Array 型もサポートしたいらしい
  • 43. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Shard Spaces and Retention Policies 43 ! • 保持期間を決めてそれが過ぎたらデータを捨てる • RRDtool 的な(ry shardSpaces = [ ! {name: "raw", retention: "4h"}, ! {name: "week", retention: "7d"}, ! {name: "month", retention: "30d"}, ! {name: "year", retention: "365d"}, ! {name: "keep", retention: "inf"} ! ] // apply these rules for shard spaces ! rules = [{ "database": "metricsDB", ! "mappings": [ ! {"space": "week", "regex": "^week.*"}, ! {"space": "month", "regex": "^month.*"}, ! {"space": "year", "regex": "^year.*"}, ! {"space": "keep", "regex": "^keep.*"}, ! {"space": "raw", "regex": ".*"} ! ] }]
  • 44. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Custom Function 44 ! ! • ユーザ定義関数 (UDF) • Lua Scripts ...
  • 45. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Security Enhancements 45 ! ! • where custom_id = 3 にマッチするデータ だけ許可とか { "readPermissions": [ { "matcher": ".*" }, { "name": "customer_events", "whereClause": "where customer_id = 3" } ], "writePermissions": [ { "name": "customer_events", "valueRestrictions": { "customer_id": 3 } } ] }
  • 46. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Merging Many Series into One 46 ! • select * from merge /stats.*/ • 正規表現で指定できるようにしたいらしい ! ※ 下のような merge はすでにできる select * from series1 merge series2
  • 47. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. (ついでに) ダッシュボード紹介 47 Elasticsearch に対する Kibana のような
  • 48. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Built-In Interface 48 ※おもちゃです
  • 49. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Grafana 49 Kibana の fork。元は Graphite 用
  • 50. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Influga 50 @hakobera 氏が作ってる便利そうなやつ :D
  • 51. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. まとめ  51 • InfluxDB の概要を説明しました • Input Plugin の仕組みが出来て、HTTP API だけ ではなく、Graphite, UDP でもデータ投入できる • group by, join は使えるが、having, サブクエリ, order by などはまだ使えない • 抽象ストレージレイヤーができたのでストレージによっ てはカラムにインデックスが利くようになるかも • Future に期待
  • 52. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 52 Thank you
  • 53. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Appendix: 情報源 53 • デザインゴール • http://influxdb.com/docs/v0.7/introduction/overview.html • https://github.com/influxdb/influxdb/blob/master/design_notes.md • config_sample.toml • https://github.com/influxdb/influxdb/blob/master/config.sample.toml • 設定ファイルを読むとドキュメントに書いてないようなのが書いてあったり.... • Community • http://influxdb.com/community • メーリングリストに入って、@jvshahid, @toddpersen, and @pauldix の三人を follow しておくとよさそう • Paul Dix - Internals of InfluxDB • http://pivotallabs.com/paul-dix-internals-influxdb/