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
行動トラッキングデータベースリプレイスの道のり
Search
ば
January 15, 2019
Programming
1.1k
0
Share
行動トラッキングデータベースリプレイスの道のり
http://www.techscore.com/blog/2019/01/15/replacing_behavior_tracking_database%F0%9F%90%AF/
ば
January 15, 2019
Other Decks in Programming
See All in Programming
Agentic Elixir
whatyouhide
0
440
KMP × Kotlin 2.3 - How Android Got Slower While iOS Builds Improved by 47%
rio432
0
120
Structured Concurrency, Scoped Values and Joiners in the JDK 25 26 27
josepaumard
1
140
決定論 vs 確率論:Gemini 3 FlashとTF-IDFを組み合わせた「法規判定エンジン」の構築
shukob
0
150
ローカルLLMでどこまでコードが書けるか / How much code can be written on a local LLM
kishida
2
300
2026年のソフトウェア開発を考える(2026/05版) / Software Engineering Scrum Fest Niigata 2026 Edition
twada
PRO
21
11k
CursorとClaudeCodeとCodexとOpenCodeを実際に比較してみた
terisuke
1
520
Building on Bluesky's AT Protocol with Ruby
mackuba
0
100
Making the RBS Parser Faster
soutaro
0
660
SREに優しいTerraform構成 modulesとstateの組み方
hiyanger
2
170
PHPでバイナリをパースして理解するASN.1
muno92
PRO
0
410
Road to RubyKaigi: Play Hard(ware)
makicamel
1
540
Featured
See All Featured
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
490
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
140
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Building Applications with DynamoDB
mza
96
7k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
120
Six Lessons from altMBA
skipperchong
29
4.2k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
260
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.9k
Transcript
行動トラッキング データベース リプレースの道のり シナジーマーケティング 馬場 彩子
アジェンダ • 行動トラッキング データベース リプレースの目的 • リプレース後のデータベース構成 • そこにいたる道のり •
教訓
行動トラッキングデータベース リプレースの目的
行動トラッキングデータベースとは • Synergy!(*1)の行動トラッキングデータを保存するデータベース • 行動トラッキングデータを利用している機能 ◦ レポート ◦ 行動ターゲティングによるメッセージ配信 *1
Synergy! : TECHSCORE運営会社のシナジーマーケティング が運用しているCRMクラウドサービス
行動トラッキングデータベース リプレースの動機 • 行動トラッキング対象の変化 メールクリック・アプリプッシュ開封などのメッセージ配信系の行動か らWebパーツ閲覧などのWeb系行動へ • データ量の急増 • データの性質の変化によりパフォーマンスが劣化
→ レポート・行動ターゲティング配信の両機能をストレスなく提供する
リプレース前のテーブルの状況 • Postgresql に格納 • データは全アカウント同じテーブルに格納 • 重複した情報を1行に保持 • 週次でテーブルをパーティショニング
課題はなにか • レポート表示のための集計が遅い • 行動ターゲティングのための問い合わせが遅い
リプレースの目的は何か • 「大量データ」を「高速にさばく」トラッキングデータベースをつくる ◦ レポート表示のための集計処理が速い ◦ 行動ターゲティングのための問い合わせが速い
リプレースの手段 • 利用用途ごとに最適なテーブル設計を採用する • トラッキングデータを利用する機能の精査を行い、参照頻度が少な い過去データを移行する
忘れてはいけない大事な点 • データベースリプレースに際して、データの損失・ダウンタイムは許 されない • 既存のサービスを動かしながら、裏側でデータベースを切り替える 必要がある
リプレース後のデータベース構成
リプレースの方向性 • フェーズ1 : 暫定対応 アプリケーションを変更せずにデータベース移設 • フェーズ2:恒久対応 テーブルの構成をベストに変更・アプリケーションも変更 •
いずれも2段階で無停止リプレース a. データを新旧両方のテーブルに登録 b. 参照系アプリの切り替え
データベース構成概要(Before) Postgresql Old App Old Log Parser
データベース構成概要(暫定対応移行期) Postgresql Old App Old Log Parser Old Tables Postgresql
New
データベース構成概要(暫定対応After) Postgresql Old App Old Log Parser Postgresql New Old
Tables
データベース構成概要(恒久対応移行期) App Old Log Parser Postgresql New Old Tables New
Tables
Postgresql New データベース構成概要(恒久対応After) Log Parser New Tables App New
テーブル構成概要 • 行動トラッキング用のテーブルの再構築 ◦ クライアントごと・行動種類ごとのテーブル ◦ 月次でパーティショニング • レポート参照用のテーブルを新設
テーブルを用途ごとに分割した理由 • アクセスパターンが違う 行動ターゲティングではIDを指定して条件に合致する行動がある かみる / レポートでは一定期間のユニーク行動者数などをみる → 各クエリに最適なテーブル構成 /
インデックス設計 • IOがボトルネック 必要な項目が違う。不要な項目の取得が多くIOを圧迫 → 必要な情報のみ取得できるようテーブルを分割
リプレースの道のり
2017年6月 • 2015年稼働のシステム。パフォーマンス課題が顕在化 • Webパーツ機能リリース ◦ レポート表示のためのクエリが遅く表示前にブラウザタイムア ウト ◦ 「ほぼ障害」(→
アプリ改修でのりきる) • リターゲティングメール配信遅延 ◦ 探索条件が特別な場合、配信開始に1時間かかる場合も
2017年7月 ー9月 (暫定対応) • 方針「アプリ改修せず、半年もつDBに」 • 方式検討 ◦ 改修後のシステムと移行方式、両方の検討が必要 ◦
テクニカルエキスパート 2名が素案作成 ◦ パフォーマンス検証と移行リハーサルを繰り返す • 方式決定 ◦ パーティション変更 / 現状と同じビューを用意 / insert trigger ◦ 直近 データは fdw による double insert 、過去データはRedshift 経由の移行 によりテーブル構成を変換しながら copy
2017年10月 • 1ヶ月かけて、過去データ移行 • 深夜作業で最終同期と切り替えを実施
2017年11−12月 • PVが多いサイトにトラッキングタグが設置され、行動トラッキング データの流量が3倍に • アプリケーションの変更も視野にいれて「3年もつシステム」に • 技術検討開始 http://d.hatena.ne.jp/yohei-a/20170910/1505060875 Lamda
? Kappa ? Redshift ? Athena? • 方式決定:RDS + 仕様変更
2018年1月ー6月 • プロダクト企画チームに閉鎖する機能の利用状況説明、営業調整 を依頼 • データ移行開始 • 各チームにアプリ改修依頼 設計方針とマイルストーンの共有 •
実装 • 機能テストおよびパフォーマンステスト • アプリ切り替え
そして今にいたる • とてもはやくなった • 機能一部閉鎖による問い合わせ、(おそらく)ゼロ
教訓
範囲を絞る • 汎用性と無能は表裏一体。どんな利用方法にも対応できるDBが いつしか、どの問い合わせにも許容できないほど反応が遅いDBに • 未来はわからない。将来のために作り込んだ機能が、現状の拡張 やパフォーマンスの邪魔をする • 10年20年運用し続けたいなら、2-3 年ごとにシステムを更新する
覚悟をもち、「3年後まで現機能が元気に動くシステムを素早くリ リース」することにフォーカスする
技術力は行動の源泉 • 自信があるから変えようと行動できる 「サービス止めずに2テラのデータベース移設する」一歩をふみだ せるか • 自信を形作るもの=技術力 • 技術力は知識とその応用力 •
武器を増やす。たとえ今使わなくても
実際に手を動かす • 動かしてみると初めてわかること 大規模のシステムではチュートリアルにあるようなシンプルな方法 だとシステム要件満たさない マニュアルに書いてあっても見過ごす細かい仕様が設計を左右す る(fdw の トランザクションレベルとか) •
新技術採用などの設計時から実際の稼働に近い形で検証すること で骨や肉になる知見が得られる ◦ AWS RDS の スナップショットの利用が可能だったのは楽だった ◦ リプレースだと非機能要件の見積もりが(比較的)容易
プロジェクト全体を俯瞰する • マイクロサービス構成に合わせた機能ごとのチーム編成になった ため、横断的にもれなく矛盾なくサービスを構成することが難しく なっていることを自覚する • 取り組み1: 全体の設計は1チーム・各機能の実現方法は各チームに任せる • 取り組み2:
結合のタイミングをめちゃくちゃ早く設定 → 最終リリース日時を変更することなく、テーブル設計の変更をす ることができた
解決方法は技術以外にもある • 当初は現行仕様を一切変更せずに実現する方法を考えていた • ただしリソースは有限 ◦ Lambda Architecture などは実装コスト高い ◦
トラッキングデータを無期限で保存するのは運用コスト高い ◦ それで実現できるのが「3年前のメールクリック行動でターゲティング可能」 ◦ 仕様の矛盾なども • その機能・サービスは必要か? ◦ 実装しない ≠ 力不足、負け ◦ この機能を維持するリソースで、他の価値あるものができないか?
このプレゼンテンプレがすばらしい • 「目的」「システム構成」「流れ」「教訓」とプロジェクトで得た知見を 網羅できる • みんな、やったらいいよ • もちろん内容もすばらしいのでみて*1 ZOZOTOWN システムリプレイスの道のり
https://speakerdeck.com/labor/zozotown-geng-huan-yun-xi-ton g-zhi-dao *1 現在は公開されていません
おしまい