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
soudai sone
PRO
May 17, 2019
Technology
1
2.5k
あのプロジェクトは今。 / 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
コミュニティと計画的偶発性理論 - 出会いが人生を変える / Life-Changing Encounters
soudai
PRO
7
1.5k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
58
25k
変化に強いテーブル設計の勘所 / Table design that is resistant to changes
soudai
PRO
66
18k
抽象化をするということ - 具体と抽象の往復を身につける / Abstraction and concretization
soudai
PRO
49
24k
目の前の仕事と向き合うことで成長できる - 仕事とスキルを広げる / Every little bit counts
soudai
PRO
38
33k
ソフトウェアエンジニアとしてキャリアの螺旋を駆け上がる方法 - 経験と出会いが人生を変える / Career-Anchor-Drive
soudai
PRO
20
6.6k
新婚19年目から学ぶ夫婦円満の正しい歩き方 / Life is beautiful
soudai
PRO
12
4.7k
顧客が本当に必要だったもの - パフォーマンス改善編 / Make what is needed
soudai
PRO
34
14k
仕事を前に進めるためのコツ - 判断と決断と共有 / Aim for the goal
soudai
PRO
100
73k
Other Decks in Technology
See All in Technology
JTCにおける内製×スクラム開発への挑戦〜内製化率95%達成の舞台裏/JTC's challenge of in-house development with Scrum
aeonpeople
0
260
Create Ruby native extension gem with Go
sue445
0
130
普通のチームがスクラムを会得するたった一つの冴えたやり方 / the best way to scrum
okamototakuyasr2
0
110
職種の壁を溶かして開発サイクルを高速に回す~情報透明性と職種越境から考えるAIフレンドリーな職種間連携~
daitasu
0
170
Oracle Cloud Infrastructure IaaS 新機能アップデート 2025/06 - 2025/08
oracle4engineer
PRO
0
110
Firestore → Spanner 移行 を成功させた段階的移行プロセス
athug
1
500
DroidKaigi 2025 Androidエンジニアとしてのキャリア
mhidaka
2
380
IoT x エッジAI - リアルタイ ムAI活用のPoCを今すぐ始め る方法 -
niizawat
0
120
Codeful Serverless / 一人運用でもやり抜く力
_kensh
7
450
AIエージェント開発用SDKとローカルLLMをLINE Botと組み合わせてみた / LINEを使ったLT大会 #14
you
PRO
0
130
メルカリIBISの紹介
0gm
0
120
実践!カスタムインストラクション&スラッシュコマンド
puku0x
0
530
Featured
See All Featured
Designing for humans not robots
tammielis
253
25k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.9k
The Power of CSS Pseudo Elements
geoffreycrofte
77
6k
Faster Mobile Websites
deanohume
309
31k
It's Worth the Effort
3n
187
28k
Thoughts on Productivity
jonyablonski
70
4.8k
Producing Creativity
orderedlist
PRO
347
40k
The Cult of Friendly URLs
andyhume
79
6.6k
Automating Front-end Workflow
addyosmani
1370
200k
Six Lessons from altMBA
skipperchong
28
4k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
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
まとめ ここで一句
まとめ 改善は 今日の一歩が 道になる
ご清聴ありがとうございました