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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
外部キー制約の知っておいて欲しいこと - RDBMSを正しく使うために必要なこと / FOREIGN KEY Night
soudai
PRO
12
5.4k
手を動かしながら学ぶデータモデリング - 論理設計から物理設計まで / Data modeling
soudai
PRO
34
8.5k
これからアウトプットする人たちへ - アウトプットを支える技術 / that support output
soudai
PRO
20
8.2k
コミュニティと計画的偶発性理論 - 出会いが人生を変える / Life-Changing Encounters
soudai
PRO
8
3.6k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
62
49k
変化に強いテーブル設計の勘所 / Table design that is resistant to changes
soudai
PRO
68
20k
抽象化をするということ - 具体と抽象の往復を身につける / Abstraction and concretization
soudai
PRO
51
34k
目の前の仕事と向き合うことで成長できる - 仕事とスキルを広げる / Every little bit counts
soudai
PRO
41
57k
ソフトウェアエンジニアとしてキャリアの螺旋を駆け上がる方法 - 経験と出会いが人生を変える / Career-Anchor-Drive
soudai
PRO
20
7.1k
Other Decks in Technology
See All in Technology
Kiro IDEのドキュメントを全部読んだので地味だけどちょっと嬉しい機能を紹介する
khmoryz
0
180
Data Hubグループ 紹介資料
sansan33
PRO
0
2.7k
M&A 後の統合をどう進めるか ─ ナレッジワーク × Poetics が実践した組織とシステムの融合
kworkdev
PRO
1
430
Codex 5.3 と Opus 4.6 にコーポレートサイトを作らせてみた / Codex 5.3 vs Opus 4.6
ama_ch
0
150
モダンUIでフルサーバーレスなAIエージェントをAmplifyとCDKでサクッとデプロイしよう
minorun365
4
190
データ民主化のための LLM 活用状況と課題紹介(IVRy の場合)
wxyzzz
2
700
Context Engineeringの取り組み
nutslove
0
340
AI駆動開発を事業のコアに置く
tasukuonizawa
1
170
Webhook best practices for rock solid and resilient deployments
glaforge
1
280
30万人の同時アクセスに耐えたい!新サービスの盤石なリリースを支える負荷試験 / SRE Kaigi 2026
genda
4
1.3k
ブロックテーマでサイトをリニューアルした話 / 2026-01-31 Kansai WordPress Meetup
torounit
0
460
生成AIを活用した音声文字起こしシステムの2つの構築パターンについて
miu_crescent
PRO
2
190
Featured
See All Featured
The Mindset for Success: Future Career Progression
greggifford
PRO
0
240
HDC tutorial
michielstock
1
370
Building a Scalable Design System with Sketch
lauravandoore
463
34k
30 Presentation Tips
portentint
PRO
1
210
The Spectacular Lies of Maps
axbom
PRO
1
520
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.1k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
280
The browser strikes back
jonoalderson
0
370
Tell your own story through comics
letsgokoyo
1
810
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
How to Think Like a Performance Engineer
csswizardry
28
2.4k
The Language of Interfaces
destraynor
162
26k
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
まとめ ここで一句
まとめ 改善は 今日の一歩が 道になる
ご清聴ありがとうございました