SlideShare una empresa de Scribd logo
1 de 29
BIツールActionista!の
OLAP集計エンジン
Jungarian
JustSystems 2015/06/16
BIツールとは?
・Business Intelligence の略
・主に企業内に存在するデータを表やグラフで可視化し、
 企業の意思決定を支援する機能の総称
・主にクロス集計
・グラフ表示ではこのクロス集計の結果を描画する
・一般に片側は時間軸
・過去から現在までの流れを可視化
未来へ向けた意思決定を支援
BIツールの集計
商品別売上データの集計表イメージ
Actionista!で商品別売上データを可視化したイメージ
Actionista!での商品別売上の集計表イメージ
Actionista!の集計エンジンの構成
Jungarian (OLAPエンジン)と
IMDB(インメモリーデータベース)からなる
一太郎 花子 ATOK
売上 売上 売上
1月 ●
2月 ▲
3月 ■
商品
月 売上
商品 月 売上
一太郎 1月 ●
花子 2月 ▲
ATOK 3月 ■
Jungarian IMDB
SQLクエリー
select 商品, 月, sum(売上) from
集計表 group by 商品, 月
ResultSet
Jungarianとは?
出典:http://img.ly/images/2288518/full
ジャンガリアンハムスター?
ではなくて・・・
・Actionsita!の集計エンジンのうち、ユーザークエリーを
 解釈してSQLを発行し、ResultSetを再処理してユーザーの
 求める集計表を返すOLAPエンジンのこと
・Javaでスクラッチから書かれている
・実行速度はオープンソースのOLAPエンジンに比べて10倍以上高速
・データベースとはJDBCドライバーで接続
 →Hive, Impala, BigQuery といった
  ビックデータSQLエンジンとも接続可能
BIツールで扱う日付
・企業内では20日締めといった、通常のカレンダーにない月の区切りがある
・半期、四半期といった、通常のカレンダーにない区切り単位も存在
・1週間をベースとして1年を52週で見ることがよくある
通常のカレンダーでは扱えないような
複雑な日付を扱う必要がある
Actionista!の扱う日付1
内部的に日付を木構造で表現
20日締めといった複雑な日付も柔軟に扱える
2015年
上期 下期
第1四半期 第4四半期
1月
21日 20日
2月
21日 20日
12月
・・・ ・・・
・・・
Actionista!の扱う日付2 - 52週の場合
2015年
1週
1日 7日
2週
1日 7日
52週
・・・ ・・・
・・・
内部的に日付を木構造で表現
1ヶ月前の今日
通常の日付の場合
・3/1 の1ヶ月前 → 2/1
・3/28の1ヶ月前 → 2/28
カレンダーオブジェクトから1ヶ月を引く
20日締めの日付の場合
通常のカレンダーオブジェクトでは計算できない
・3/21の1ヶ月前 → 2/21
・3/28の1ヶ月前 → 2/28
・3/29の1ヶ月前 → 3/1
・3/30の1ヶ月前 → 3/2
・3/31の1ヶ月前 → 3/3
  
・4/17の1ヶ月前 → 3/20
…
Actionista!での1ヶ月前の今日の求め方
日付
2016年
下期
第4四半期
12月
21日 20日
2015年
上期
第1四半期
1月
21日 20日
下期
第4四半期
12月1月
21日 20日
さらにキャッシュを工夫してO(1)で求める
木の深さをNとするとO(N)
JungarianでのSQL周りのチューニング
SQLの投げる回数を減らす
・まとめられる集計は1つのSQLにまとめる
・計などは可能な限りJungarian側で集計
SQLを速いSQLに置き換える
・ORをなるべく使わない
・そもそもwhere句を使わないでJungarianで間引く
Jungarianでの集計例
2015年の売上の場合
2015年 商品
年 売上
年 売上
2015年 ●
Jungarian IMDB
SQLクエリー
select 年, sum(売上) from
集計表 group by 年 where 年 = 2015
ResultSet
売上
2015年 ●
2015年の前年売上の場合
2015年 商品
年 前年売上
年 売上
2014年 ▲
Jungarian IMDB
SQLクエリー
select 年, sum(売上) from
集計表 group by 年 where 年 = 2014
ResultSet
前年売上
2015年 ● / ▲
変換
逆変換
2015年の売上前年比の場合
2015年 商品
年 売上前年比
年 売上
2014年 ▲
Jungarian IMDB
select 年, sum(売上) from
集計表 group by 年 where 年 = 2014
売上前年比
2015年 ● / ▲
変換
逆変換・合成
年 売上
2015年 ●
select 年, sum(売上) from
集計表 group by 年 where 年 = 2015
2015年の売上前年比のSQL最適化
SQL 2回 → 1回 (約2倍高速)
2015年 商品
年 売上前年比
年 売上
2014年 ▲
2015年 ●
Jungarian IMDB
select 年, sum(売上) from
集計表 group by 年 where 年 in (2015,2014)
売上前年比
2015年 ● / ▲
変換・SQL合成
逆変換・合成
まとめ
・Actionista!では木構造の日付を採用することで、
 複雑な日付にも柔軟対応
・Jungarianでは日付の処理をキャッシュすることで
 OLAP処理を高速実行
 さらにSQLの投げ方を工夫することで、データベースでの
 処理時間を減らす
・オープンソースのOLAPエンジン+PostgreSQLに比べて、
 Actionista!のJungarian+IMDBは100倍から1万倍以上と
 圧倒的に高速に集計
BIツールActionista!のOLAP集計エンジンJungarian

Más contenido relacionado

Más de JustSystems Corporation

Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話JustSystems Corporation
 
「技術内閣制度」〜2年間やってきて得られた事とこれから〜 #devsumi
「技術内閣制度」〜2年間やってきて得られた事とこれから〜 #devsumi「技術内閣制度」〜2年間やってきて得られた事とこれから〜 #devsumi
「技術内閣制度」〜2年間やってきて得られた事とこれから〜 #devsumiJustSystems Corporation
 
事業に貢献する商品開発と その成長の仕組み作り ~これからのエンジニアに必要とされるスキルとは~
事業に貢献する商品開発と その成長の仕組み作り ~これからのエンジニアに必要とされるスキルとは~事業に貢献する商品開発と その成長の仕組み作り ~これからのエンジニアに必要とされるスキルとは~
事業に貢献する商品開発と その成長の仕組み作り ~これからのエンジニアに必要とされるスキルとは~JustSystems Corporation
 
現役23名のPM:タイプ別マネジメントパターン
現役23名のPM:タイプ別マネジメントパターン現役23名のPM:タイプ別マネジメントパターン
現役23名のPM:タイプ別マネジメントパターンJustSystems Corporation
 
JavaでインメモリSQLエンジンを作ってみた
JavaでインメモリSQLエンジンを作ってみたJavaでインメモリSQLエンジンを作ってみた
JavaでインメモリSQLエンジンを作ってみたJustSystems Corporation
 
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話JustSystems Corporation
 
JustTechTalk#11_スマイルゼミ顧客満足度への貢献
JustTechTalk#11_スマイルゼミ顧客満足度への貢献JustTechTalk#11_スマイルゼミ顧客満足度への貢献
JustTechTalk#11_スマイルゼミ顧客満足度への貢献JustSystems Corporation
 
ピュアJavaだと思った?残念androidでした~いつからAndroidをJavaだと錯覚していた?~
ピュアJavaだと思った?残念androidでした~いつからAndroidをJavaだと錯覚していた?~ピュアJavaだと思った?残念androidでした~いつからAndroidをJavaだと錯覚していた?~
ピュアJavaだと思った?残念androidでした~いつからAndroidをJavaだと錯覚していた?~JustSystems Corporation
 
最新のJava言語仕様で見るモジュールシステム #jjug
最新のJava言語仕様で見るモジュールシステム #jjug最新のJava言語仕様で見るモジュールシステム #jjug
最新のJava言語仕様で見るモジュールシステム #jjugJustSystems Corporation
 
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~JustSystems Corporation
 
JustTechTalk#10 React開発における自動テスト実践
JustTechTalk#10 React開発における自動テスト実践JustTechTalk#10 React開発における自動テスト実践
JustTechTalk#10 React開発における自動テスト実践JustSystems Corporation
 
JustTechTalk#10windowsアプリでのテスト自動化事例
JustTechTalk#10windowsアプリでのテスト自動化事例JustTechTalk#10windowsアプリでのテスト自動化事例
JustTechTalk#10windowsアプリでのテスト自動化事例JustSystems Corporation
 
インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~
インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~
インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~JustSystems Corporation
 
AWS運用における最適パターンの徹底活用
AWS運用における最適パターンの徹底活用AWS運用における最適パターンの徹底活用
AWS運用における最適パターンの徹底活用JustSystems Corporation
 
ジャストシステムのDevOps実例 今後の取り組み
ジャストシステムのDevOps実例 今後の取り組みジャストシステムのDevOps実例 今後の取り組み
ジャストシステムのDevOps実例 今後の取り組みJustSystems Corporation
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜JustSystems Corporation
 
Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.JustSystems Corporation
 
CSSレイアウトでなぜ失敗するか?
CSSレイアウトでなぜ失敗するか?CSSレイアウトでなぜ失敗するか?
CSSレイアウトでなぜ失敗するか?JustSystems Corporation
 
Selenium WebDriver + python で E2Eテスト自動化
Selenium WebDriver + python で E2Eテスト自動化Selenium WebDriver + python で E2Eテスト自動化
Selenium WebDriver + python で E2Eテスト自動化JustSystems Corporation
 
TypeScriptの大規模開発への適用
TypeScriptの大規模開発への適用TypeScriptの大規模開発への適用
TypeScriptの大規模開発への適用JustSystems Corporation
 

Más de JustSystems Corporation (20)

Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
 
「技術内閣制度」〜2年間やってきて得られた事とこれから〜 #devsumi
「技術内閣制度」〜2年間やってきて得られた事とこれから〜 #devsumi「技術内閣制度」〜2年間やってきて得られた事とこれから〜 #devsumi
「技術内閣制度」〜2年間やってきて得られた事とこれから〜 #devsumi
 
事業に貢献する商品開発と その成長の仕組み作り ~これからのエンジニアに必要とされるスキルとは~
事業に貢献する商品開発と その成長の仕組み作り ~これからのエンジニアに必要とされるスキルとは~事業に貢献する商品開発と その成長の仕組み作り ~これからのエンジニアに必要とされるスキルとは~
事業に貢献する商品開発と その成長の仕組み作り ~これからのエンジニアに必要とされるスキルとは~
 
現役23名のPM:タイプ別マネジメントパターン
現役23名のPM:タイプ別マネジメントパターン現役23名のPM:タイプ別マネジメントパターン
現役23名のPM:タイプ別マネジメントパターン
 
JavaでインメモリSQLエンジンを作ってみた
JavaでインメモリSQLエンジンを作ってみたJavaでインメモリSQLエンジンを作ってみた
JavaでインメモリSQLエンジンを作ってみた
 
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
 
JustTechTalk#11_スマイルゼミ顧客満足度への貢献
JustTechTalk#11_スマイルゼミ顧客満足度への貢献JustTechTalk#11_スマイルゼミ顧客満足度への貢献
JustTechTalk#11_スマイルゼミ顧客満足度への貢献
 
ピュアJavaだと思った?残念androidでした~いつからAndroidをJavaだと錯覚していた?~
ピュアJavaだと思った?残念androidでした~いつからAndroidをJavaだと錯覚していた?~ピュアJavaだと思った?残念androidでした~いつからAndroidをJavaだと錯覚していた?~
ピュアJavaだと思った?残念androidでした~いつからAndroidをJavaだと錯覚していた?~
 
最新のJava言語仕様で見るモジュールシステム #jjug
最新のJava言語仕様で見るモジュールシステム #jjug最新のJava言語仕様で見るモジュールシステム #jjug
最新のJava言語仕様で見るモジュールシステム #jjug
 
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
 
JustTechTalk#10 React開発における自動テスト実践
JustTechTalk#10 React開発における自動テスト実践JustTechTalk#10 React開発における自動テスト実践
JustTechTalk#10 React開発における自動テスト実践
 
JustTechTalk#10windowsアプリでのテスト自動化事例
JustTechTalk#10windowsアプリでのテスト自動化事例JustTechTalk#10windowsアプリでのテスト自動化事例
JustTechTalk#10windowsアプリでのテスト自動化事例
 
インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~
インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~
インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~
 
AWS運用における最適パターンの徹底活用
AWS運用における最適パターンの徹底活用AWS運用における最適パターンの徹底活用
AWS運用における最適パターンの徹底活用
 
ジャストシステムのDevOps実例 今後の取り組み
ジャストシステムのDevOps実例 今後の取り組みジャストシステムのDevOps実例 今後の取り組み
ジャストシステムのDevOps実例 今後の取り組み
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
 
Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.
 
CSSレイアウトでなぜ失敗するか?
CSSレイアウトでなぜ失敗するか?CSSレイアウトでなぜ失敗するか?
CSSレイアウトでなぜ失敗するか?
 
Selenium WebDriver + python で E2Eテスト自動化
Selenium WebDriver + python で E2Eテスト自動化Selenium WebDriver + python で E2Eテスト自動化
Selenium WebDriver + python で E2Eテスト自動化
 
TypeScriptの大規模開発への適用
TypeScriptの大規模開発への適用TypeScriptの大規模開発への適用
TypeScriptの大規模開発への適用
 

BIツールActionista!のOLAP集計エンジンJungarian