若手Webエンジニア勉強会公開用

533 views

Published on

若手Webエンジニア勉強会用の資料

Published in: Data & Analytics
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
533
On SlideShare
0
From Embeds
0
Number of Embeds
42
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

若手Webエンジニア勉強会公開用

  1. 1. Hitokuse Inc.© HiveのORマッパー を自作した話 1
  2. 2. Hitokuse Inc.© 自己紹介 2 株式会社ヒトクセ取締役CMO 濁沼広樹 横浜国立大学出身 株式会社リアルワールドを経てヒトクセへ 技術系 : ビジネス系 = 5 : 5 サーバーサイド(Ruby on Rails) インフラ(AWS) Twitter : @nigohiroki
  3. 3. Hitokuse Inc.© -集計- 3 Hive集計 + DB保存
  4. 4. Hitokuse Inc.© Hive集計 + DB保存 4 処理イメージ (1時間に一回行う) 生データ (JSON) 集計データ(DB) ad_id 1 imp 100 click 20 { id : 1 , type : imp} { id : 1 , type : imp} ... { id : 1 , type : click} Hiveを実行するスクリプトをRubyで記述
  5. 5. Hitokuse Inc.© Hive集計 + DB保存 5 EC2からHiveのHQLを実行する RubyのコードにHQLを記述する SELECT count(*) FROM logs WHERE type = imp GROUP BY app_id; コードが長くなる。 書き間違いが起こる。 保守性が悪い。
  6. 6. Hitokuse Inc.© 6 HiveのORマッパーを作る
  7. 7. Hitokuse Inc.© HiveのORマッパーを作る 7 RailsのActiveRecordライクにする SELECT count(*) FROM logs WHERE type = imp GROUP BY app_id; これを Log.hive_select(count(*)).hive_where(type: :imp) .hive_group_by(:app_id) こういう感じで書きたい
  8. 8. Hitokuse Inc.© HiveのORマッパーを作る 8 ActiveRecordっぽい感じにするには1 クラス名.メソッド名 例 ) User.find(1) 対象のモデルにクラスメソッドを追加 例 ) self.hive_select, self.hive_where Log.hive_select()
  9. 9. Hitokuse Inc.© HiveのORマッパーを作る 9 ActiveRecordっぽい感じにするには2 クラス名.メソッド名.メソッド名 例 ) User.where().order().limit() 各メソッドの返り値をselfにする 例 ) def self.hive_select 何かしらの処理 self end
  10. 10. Hitokuse Inc.© HiveのORマッパーを作る 10 ActiveRecordっぽい感じにするには3 どのクラスでも共通のメソッドを使いたい 例 ) User.where(), Article.where() 継承 or concern app/models/concerns/hive_active_record.rb 該当のモデルにて include HiveActiveRecord
  11. 11. Hitokuse Inc.© HiveのORマッパーを作る 11 こうして出来たORマッパーはこんな感じ Log.hive_select(count(*)).hive_where(type: :imp) .hive_group_by(:app_id) これが SELECT count(*) FROM logs WHERE type = imp GROUP BY app_id; このようなHQLを吐き出します このようなHQLをインスタンス変数に格納します
  12. 12. Hitokuse Inc.© 12 HiveのORマッパー改善
  13. 13. Hitokuse Inc.© HiveのORマッパーを作る 13 改善点1 HQLをインスタンス変数に保存 -> HQLを取り出すゲッター的なものが必要 メソッドが後続に続いているかどうかを判断 1) User.where().limit() 2) User.where() where()の返り値を1の場合はself 2の場合はHQLを返したい
  14. 14. Hitokuse Inc.© HiveのORマッパーを作る 14 改善点2 そもそもHQLを吐き出すではなく実行してほしい -> HiveActiveRecordで EMRのインスタンスに接続 他にも改善点は色々 いつかはGemに!
  15. 15. Hitokuse Inc.© まとめ 15 いつかはGemに! 集計の度に楽できる!
  16. 16. Hitokuse Inc.© おまけ 16 Ruby on Rails ヒトクセを支える技術 AWS JavaScript Hadoop Chef fluentd 最適化アルゴリズム(bandit)
  17. 17. Hitokuse Inc.© おまけ 17 絶賛エンジニア 募集中!! 詳しくは交流会で

×