Jobのお話
どんなプロダクト?
- Google とか Yahoo とかの広告の配信結果を収集して
- 各プロダクトの売上を広告の配信結果を紐付けて
- 効果計測するため
- サマリーデータ作ったり
- レポート生成したり
プロダクトを支える
重要な技術
JOB
どんな課題だったか
課題
- 数値は随時更新されるので最新のものにしたい
- 入稿データにミスがあって集計できないので修正したのですぐ再集計したい
それってつまり 🤔
すぐリトライしたい ☺️
JOBの重要な機能
-
リトライ
- 冪等性
- JOBの適切な粒度
冪等性とは
- 大雑把に言って、ある操作を1回行っても複数回行っても結果が同じであることをいう概念
現状すぐ簡単に
できない 😡
なぜか 🤔
理由
- Jobが1回しか実行できない
- 1回しか実行できないようにしている
- Treasure Dataに入れているので重複カウントになってしまうから同じ結果が出てこない
- インポートや集計に時間がかかる
- 特に集計したとき広告1つ1つのインスタンスを生成してElasticsearchに入れているのが無駄
-
インポートが全部終わってないと集計できない仕様
- 集計要求はプロダクト毎に来る
- プロダクト毎に集計できるのが望ましい
- Treasure Dataにデータを入れて,集計して,集計結果をElasticsearchにいれて...なんだかリトライが煩わしい
Jobが1回しか実行できない
- 対策
- Treasure Dataの今日インポートした分を削除する
- 削除投げてみてもなんかうまく消えたり消えなかったりする現象あるで...
- 毎回 create -> drop
- Treasure Dataのデータがバックアップ的な意味合いがあったので消しづらい
- 実は古いデータにアクセスすると全スキャン走ってるっぽくてめっちゃselect遅い
- 実はバックアップになっていなかった可能性
- Treasure Data使わない
Treasure Dataを使わなくてもいけるの?
- こっそりKibana入れてみていた
- データ確認にも使える
- 誰か分析とかで使いたいとか言い出さないかな...
- Treasure Dataを使っていたのは広告から広告グループやキャンペーンなど広告をまとめたもののデータを集計するために使っていたのだが...
- Kibanaから試しに広告のindexにaggregation投げたら普通にリアルタイムな時間で返ってきてしまった(多少filterしてるけど)
- もうTreasure Dataいらないんじゃね?
👋
インポートや集計に時間がかかる
- 直接ESに入れるので広告1つ1つを入れる部分がなくなった
インポートが全部終わってないと集計できない仕様
- キーとしてプロダクト毎に分かれる機能がなかったのでつけた
- 省略
💪
Treasure Dataにデータを入れて,集計して,集計結果をElasticsearchにいれて...
- もう Elasticsearch だけ
- WorkFlow いれたらいいと思う
DigDag
- Treasure Data 古橋さん謹製 WorkFlow Engine
- 間違いなし
- import 周りは job いっぱいだし前後関係あるので DigDag入れる予定
🙏
結局これで何ができる?
すぐ簡単に
リトライできる 🙌
副産物
- TD分のお金浮く
- ローカル完結できる