BigQuery で1秒動画の配信対象家族を爆速で抽出する / How to create 1sec movie schedules with bigquery
by
nyuki
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
BigQuery で 1秒動画の配信対象家族を 爆速で抽出する 株式会社ミクシィ みてね事業部 中野裕貴 1
Slide 2
Slide 2 text
自己紹介 2 • 中野裕貴(なかのゆうき) • 「みてね」に来て1年半くらい • (必要があれば書くくらいの)SQL おじさん
Slide 3
Slide 3 text
目次 • 1秒動画の配信スケジュールと条件 • クエリの設計と実装 • クエリのテスト 3
Slide 4
Slide 4 text
1秒動画知ってますか? 4
Slide 5
Slide 5 text
配信スケジュール 5 通常時 通常時 1日目 2日目 3日目以降 数千家族 数千家族 数万家族 数万家族 数万家族 3か月に1度 1秒動画配信日
Slide 6
Slide 6 text
対象家族 6 1秒動画がまだ配信されていない アプリバージョンを満たす 3か月10本以上メディアを持つ
Slide 7
Slide 7 text
配信優先度の高い家族 Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 定期的に上げている 動画が多い 動画をアップロードした日 画像をアップロードした日 7
Slide 8
Slide 8 text
メインサーバでの処理時間 8 ※1 クリエイティブ・コモンズ 表示-継承 4.0 国際 (CC BY-SA 4.0) ライセンスに基づいて公開されています。また、「Rails」および 「Ruby on Rails」という名称、そして Rails のロゴは、David Heinemeier Hansson による登録商標で、すべての権利を有しています。 ※2 http://www.mysql.com/ ※1 ※2
Slide 9
Slide 9 text
9
Slide 10
Slide 10 text
2時間近くかかっていた...... 10
Slide 11
Slide 11 text
疑似コード 11 とってもよくまわる箇所
Slide 12
Slide 12 text
12 から テスト 実装 ※1 クリエイティブ・コモンズ 表示-継承 4.0 国際 (CC BY-SA 4.0) ライセンスに基づいて公開されています。また、「Rails」および 「Ruby on Rails」という名称、そして Rails のロゴは、David Heinemeier Hansson による登録商標で、すべての権利を有しています。 ※2 https://bigquery.cloud.google.com ※1 ※2
Slide 13
Slide 13 text
クエリの設計と実装 13 https://gist.github.com/m-nyuki/6407df4697b7dd4c31999109ce13021e
Slide 14
Slide 14 text
14 この画像の作成者 Twemoji v2 project は CC BY のライセンスを許諾されています クエリの設計と実装
Slide 15
Slide 15 text
必須条件を集合で表現 15 メディアが 10本以上ある 特定バージョン以上 1秒動画が まだ配信されていない
Slide 16
Slide 16 text
各集合をWITH句でまとめると見やすい 16 WITH句でまとめると便利
Slide 17
Slide 17 text
各集合をクエリで表現 17 メディアが 10本以上ある 特定バージョン以上 1秒動画が まだ配信されていない
Slide 18
Slide 18 text
ソート条件 18 ORDER BY でソート LIMIT で取得数制限
Slide 19
Slide 19 text
ソート条件 19 WITH句内を拡張 ソート条件を追加
Slide 20
Slide 20 text
クエリのテスト 20 WITH句を使ってダミーテーブルを作成
Slide 21
Slide 21 text
RSpecでテストしたい! 21
Slide 22
Slide 22 text
RSpec でテスト 22 参考: Bigquery上で実行するバッチ処理のテストコードを書く (Ruby編) https://qiita.com/joker1007/items/c3a3bb3db138b9f6734a ① BigQuery のView を使用 ② google-cloud-ruby を使用 ③ テストの実行
Slide 23
Slide 23 text
BigQuery のView • ビューは SQL クエリによって定義される仮想テーブルです https://cloud.google.com/bigquery/docs/views-intro?hl=ja 23 ①ビューを保存 ②実行
Slide 24
Slide 24 text
google-cloud-ruby 24 before フックで作って、afterフック で消しておこう
Slide 25
Slide 25 text
テストの実行 25 テストは⾧くなりがち。なるべく短くしたい VCR(https://github.com/vcr/vcr)などで モックしておくほうがいいと思います VCR
Slide 26
Slide 26 text
まとめ • アクティブ家族数の増加とともに、1秒動画対象家族抽出時間が増大 • 事業成⾧とともに、見えてくる課題がたくさんある • テストをまわす文化いいですね • テスト書くぞ! • 全員がいいものを届けようという気持ち • ユーザさんから感謝をいただけると嬉しい 26
Slide 27
Slide 27 text
ご清聴ありがとうございました! 27