Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
BigQuery で1秒動画の配信対象家族を爆速で抽出する / How to create 1...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
nyuki
February 13, 2019
4.7k
0
Share
BigQuery で1秒動画の配信対象家族を爆速で抽出する / How to create 1sec movie schedules with bigquery
nyuki
February 13, 2019
More Decks by nyuki
See All by nyuki
1日数万件の1秒動画を安定して生成するために / How to create ten of thousands of 1sec movies with FFmpeg
nyuki
0
4.5k
Deep Learningを用いた類似画像レコメンドのSQL on Hadoopによる実現
nyuki
2
2.7k
Featured
See All Featured
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
62
53k
Docker and Python
trallard
47
3.8k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.6k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.1k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
260
Exploring anti-patterns in Rails
aemeredith
3
300
The Pragmatic Product Professional
lauravandoore
37
7.2k
The untapped power of vector embeddings
frankvandijk
2
1.7k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
110k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
10k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
140
Transcript
BigQuery で 1秒動画の配信対象家族を 爆速で抽出する 株式会社ミクシィ みてね事業部 中野裕貴 1
自己紹介 2 • 中野裕貴(なかのゆうき) • 「みてね」に来て1年半くらい • (必要があれば書くくらいの)SQL おじさん
目次 • 1秒動画の配信スケジュールと条件 • クエリの設計と実装 • クエリのテスト 3
1秒動画知ってますか? 4
配信スケジュール 5 通常時 通常時 1日目 2日目 3日目以降 数千家族 数千家族 数万家族
数万家族 数万家族 3か月に1度 1秒動画配信日
対象家族 6 1秒動画がまだ配信されていない アプリバージョンを満たす 3か月10本以上メディアを持つ
配信優先度の高い家族 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
メインサーバでの処理時間 8 ※1 クリエイティブ・コモンズ 表示-継承 4.0 国際 (CC BY-SA 4.0)
ライセンスに基づいて公開されています。また、「Rails」および 「Ruby on Rails」という名称、そして Rails のロゴは、David Heinemeier Hansson による登録商標で、すべての権利を有しています。 ※2 http://www.mysql.com/ ※1 ※2
9
2時間近くかかっていた...... 10
疑似コード 11 とってもよくまわる箇所
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
クエリの設計と実装 13 https://gist.github.com/m-nyuki/6407df4697b7dd4c31999109ce13021e
14 この画像の作成者 Twemoji v2 project は CC BY のライセンスを許諾されています クエリの設計と実装
必須条件を集合で表現 15 メディアが 10本以上ある 特定バージョン以上 1秒動画が まだ配信されていない
各集合をWITH句でまとめると見やすい 16 WITH句でまとめると便利
各集合をクエリで表現 17 メディアが 10本以上ある 特定バージョン以上 1秒動画が まだ配信されていない
ソート条件 18 ORDER BY でソート LIMIT で取得数制限
ソート条件 19 WITH句内を拡張 ソート条件を追加
クエリのテスト 20 WITH句を使ってダミーテーブルを作成
RSpecでテストしたい! 21
RSpec でテスト 22 参考: Bigquery上で実行するバッチ処理のテストコードを書く (Ruby編) https://qiita.com/joker1007/items/c3a3bb3db138b9f6734a ① BigQuery のView
を使用 ② google-cloud-ruby を使用 ③ テストの実行
BigQuery のView • ビューは SQL クエリによって定義される仮想テーブルです https://cloud.google.com/bigquery/docs/views-intro?hl=ja 23 ①ビューを保存 ②実行
google-cloud-ruby 24 before フックで作って、afterフック で消しておこう
テストの実行 25 テストは⾧くなりがち。なるべく短くしたい VCR(https://github.com/vcr/vcr)などで モックしておくほうがいいと思います VCR
まとめ • アクティブ家族数の増加とともに、1秒動画対象家族抽出時間が増大 • 事業成⾧とともに、見えてくる課題がたくさんある • テストをまわす文化いいですね • テスト書くぞ! •
全員がいいものを届けようという気持ち • ユーザさんから感謝をいただけると嬉しい 26
ご清聴ありがとうございました! 27