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
あのプロジェクトは今。 / kichijojipm
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
soudai sone
PRO
May 17, 2019
Technology
1
2.6k
あのプロジェクトは今。 / kichijojipm
吉祥寺pmの登壇資料です。
https://kichijojipm.connpass.com/event/128569/
soudai sone
PRO
May 17, 2019
Tweet
Share
More Decks by soudai sone
See All by soudai sone
APMの世界から見るOpenTelemetryのTraceの世界 / OpenTelemetry in the Java
soudai
PRO
0
320
失敗できる意思決定とソフトウェアとの正しい歩き方_-_変化と向き合う選択肢/ Designing for Reversible Decisions
soudai
PRO
10
2.7k
外部キー制約の知っておいて欲しいこと - RDBMSを正しく使うために必要なこと / FOREIGN KEY Night
soudai
PRO
15
6.3k
手を動かしながら学ぶデータモデリング - 論理設計から物理設計まで / Data modeling
soudai
PRO
42
10k
これからアウトプットする人たちへ - アウトプットを支える技術 / that support output
soudai
PRO
21
8.5k
コミュニティと計画的偶発性理論 - 出会いが人生を変える / Life-Changing Encounters
soudai
PRO
8
4k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
64
52k
変化に強いテーブル設計の勘所 / Table design that is resistant to changes
soudai
PRO
68
20k
抽象化をするということ - 具体と抽象の往復を身につける / Abstraction and concretization
soudai
PRO
52
35k
Other Decks in Technology
See All in Technology
非同期・イベント駆動処理の分散トレーシングの繋げ方
ichikawaken
1
150
DDD×仕様駆動で回す高品質開発のプロセス設計
littlehands
6
2.6k
CREがSLOを握ると 何が変わるのか
nekomaho
0
140
Zephyr(RTOS)でOpenPLCを実装してみた
iotengineer22
0
130
【AWS】CloudTrail LakeとCloudWatch Logs Insightsの使い分け方針
tsurunosd
0
120
AIエージェント勉強会第3回 エージェンティックAIの時代がやってきた
ymiya55
0
140
AgentCoreとLINEを使った飲食店おすすめアプリを作ってみた
yakumo
2
260
AI時代のシステム開発者の仕事_20260328
sengtor
0
290
Phase12_総括_自走化
overflowinc
0
1.7k
MCPで決済に楽にする
mu7889yoon
0
130
ADK + Gemini Enterprise で 外部 API 連携エージェント作るなら OAuth の仕組みを理解しておこう
kaz1437
0
210
GitHub Actions侵害 — 相次ぐ事例を振り返り、次なる脅威に備える
flatt_security
5
4.1k
Featured
See All Featured
The Language of Interfaces
destraynor
162
26k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
140
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
400
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.5k
Ruling the World: When Life Gets Gamed
codingconduct
0
180
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
250
Chasing Engaging Ingredients in Design
codingconduct
0
150
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
220
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.4k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.2k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.8k
Transcript
あのプロジェクトは今。 僕が考えた 最強のRDBリファクタリング 吉祥寺.pm #18
What is it? 吉祥寺.P(roject)M(anagement)
What is it? みなさん覚えていますか?
What is it?
What is it? RDBリファクタリングの話
What is it? あれから一年
What is it? そーだいなる物語が今、始まる
あじぇんだ 1 自己紹介 2 おさらい 3 技術で解決できたこと 4 技術で解決できなかった事 5
まとめ
あじぇんだ 1 自己紹介 2 おさらい 3 技術で解決できたこと 4 技術で解決できなかった事 5
まとめ
自己紹介 曽根 壮大(34歳) 株式会社オミカレ 副社長/CTO • 日本PostgreSQLユーザ会 勉強会分科会 座長 •
3人の子供がいます • 技術的にはWeb/LL言語/RDBが好きです そ ね た け と も
自己紹介 曽根 壮大(34歳) 株式会社オミカレ 副社長/CTO • 日本PostgreSQLユーザ会 勉強会分科会 座長 •
3人の子供がいます • 技術的にはWeb/LL言語/RDBが好きです そ ね た け と も
婚活といえばオミカレ https://party-calendar.net/
本を書きました https://www.amazon.co.jp/exec/obidos/ASIN/4297104083/maple036-22/
あじぇんだ 1 自己紹介 2 おさらい 3 技術で解決できたこと 4 技術で解決できなかった事 5
まとめ
おさらい オミカレは DBリファクタリングをしています
https://employment.en-japan.com/engineerhub/entry/2018/12/11/110000
おさらい なぜ 我々はリファクタリングするのか
リファクタリングをする理由 システム、三日会わざれば刮目して見よ
リファクタリングをする理由 いなかった時期
リファクタリングをする理由 わずか1年半 しかし成長するには充分な時間である
リファクタリングをする理由 とある日の出来事 「TABLEを眺める会をやろう!」
リファクタリングをする理由 このTABLEってなんですか? それな、俺も知らないんだ…
リファクタリングをする理由 誰も知らないTABLEの恐怖
謎のデータ mysql> SELECT gender FROM demo GROUP BY gender; +--------+
| gender | +--------+ | 0 | | 1 | | 女性 | | 男性 | +--------+ 4 rows in set (0.62 sec)
なるほど???
リファクタリングをする理由 8年目のWebサービス
リファクタリングをする理由 8年目のWebサービス ↓ 多くの変化によって、技術的負債が出来る 事業の成長のために優先順として仕方ないところもある
リファクタリングをする理由 有るモノを嘆いても何も変わらない
リファクタリングをする理由 有るモノを嘆いても何も変わらない ↓ 自分たちが技術で解決していくしか無い
あじぇんだ 1 自己紹介 2 おさらい 3 技術で解決できたこと 4 技術で解決できなかった事 5
まとめ
技術で解決できたこと 要件 • なるべく無停止で進めたい • 複数のWebサービスから参照される が同時には直せない • 工数は限られ、新規開発は止めない
リファクタリング方針 Aurora みんなの婚活 オミカレ party_detail party_open party 既存スキーマ 新スキーマ オミカレ
データベース トリガー
リファクタリング方針 Aurora みんなの婚活 オミカレ party_detail party_open party 既存スキーマ 新スキーマ オミカレ
データベース トリガー ① アプリケーション がデータを書き込む
リファクタリング方針 Aurora みんなの婚活 オミカレ party_detail party_open party 既存スキーマ 新スキーマ オミカレ
データベース トリガー ②書き込みをイベント にトリガーが起動
リファクタリング方針 Aurora みんなの婚活 オミカレ party_detail party_open party 既存スキーマ 新スキーマ オミカレ
データベース トリガー ③トリガーがそれぞれのテーブル に書き込みを行う
リファクタリング方針 Aurora みんなの婚活 オミカレ party_detail party_open party 既存スキーマ 新スキーマ PostgreSQL
トリガー 異種DB間の レプリケーションが必要
技術で解決できたこと AWS Database Migration Service
Amazon DMSの仕組み ソース エンドポイント (Aurora) タスク テーブル単位でのレプリケーションが可能 ターゲット エンドポイント (PostgreSQL)
レプリケーション インスタンス タスク
Amazon DMSの仕組み https://speakerdeck.com/takahashiikki/postgresqljapan2018
リファクタリング方針 Aurora みんなの婚活 オミカレ party_detail party_open party 既存スキーマ 新スキーマ PostgreSQL
トリガー 出来る!
技術で解決できたこと 運用での出来事
技術で解決できたこと 時々DMSが止まるッス! データの登録時のエラーを監視しよう
技術で解決できたこと RDSのログを PHP経由で定期的にチェックする
技術で解決できたこと 1. AWS SDK for PHPで downloadDBLogFilePortion関数を実行 2. Errorなどの特定のキーワードを拾ってalert 3.
Mackerelのチェック監視の仕組みで通知
技術で解決できたこと AWS php mackerel-agent Slack ① SDKを実行 ② ログを取得 ③
ログを確認 ④Mackerel経由で通知 Mackerel-agentが定期的に実行する
技術で解決できたこと 既存のコードテスト無いッス! REST APIでモデルを抽象化してそこにテストを加工
技術で解決できたこと https://employment.en-japan.com/engineerhub/entry/2018/12/11/110000
技術で解決できたこと 参照を切り替える
技術で解決できたこと 参照を切り替える ↓ API経由にすることでModel単位で対応
この方法のメリット • Model単位で移行が可能 – 対象のテーブル単位で対応できる – リスクの範囲を小さくできる • 既存の仕組みを止める必要が無い –
カナリヤリリース出来る – ロールバックしやすい • 以下のパターンで概ねリスク低く、対応出来る – 読み込みだけAPIにして書き込みはOLD • この場合はデータはAmazon DMSで連携 – 書き込みはAPIとOLDの両方に書き込み、 読み込みはOLD • この場合はAmazon DMSを使わない
実際に運用してわかったこと 1. 性別がintでは無く文字列のため表記揺れ 2. MySQLのZero Date問題(0000-00-00) 3. タイムゾーンがUTCでズレる
技術で解決できたこと 想定外のデータは意外とある
技術で解決できたこと 想定外のデータは意外とある ↓ 細かい制約と監視・観測で 1つ1つ潰して行く
あじぇんだ 1 自己紹介 2 おさらい 3 技術で解決できたこと 4 技術で解決できなかった事 5
まとめ
技術で解決できなかった事 全てを1回で捨てれなかった
技術で解決できなかった事 全てを1回で捨てれなかった ↓ 具体的には管理画面とか
技術で解決できなかった事 ユーザ画面変更に対する 画面リニューアルのリスク
技術で解決できなかった事 ユーザが本当に付いて来るか SEOは大丈夫か
技術で解決できなかった事 ビジネス的なメリットを 用意できなかった
技術で解決できなかった事 スケジュールと見積もり
技術で解決できなかった事 スケジュールと見積もり ↓ 無限にズレる
技術で解決できなかった事 デザイナーの採用
技術で解決できなかった事 デザイナーの採用 ↓ これ、もう運じゃね?
技術で解決できなかった事 売上の拡大
技術で解決できなかった事 売上の拡大 ↓ 技術的に優れているからと言って 売れるとは限らない
あじぇんだ 1 自己紹介 2 おさらい 3 技術で解決できたこと 4 技術で解決できなかった事 5
まとめ
まとめ まだ絶賛リファクタリング中なので 進捗を今後も報告していきます! (辛かったとこも含めて)
オミカレは仲間を募集中です デザイナやマーケやエンジニアを 絶賛 大募集中です https://party-calendar.net/corp/recruite
まとめ ここで一句
まとめ 改善は 今日の一歩が 道になる
ご清聴ありがとうございました