Upgrade to Pro — share decks privately, control downloads, hide ads and more …

あらゆる商品を扱う商品データベースを再設計した話 / product db re-architecture

rince
March 26, 2024

あらゆる商品を扱う商品データベースを再設計した話 / product db re-architecture

2024/3/26 @Offers 各社事例で振り返る データ構造x技術負債LT vol.2

マイベストの商品データベースを再設計した実例を通して、データベースやアーキテクチャを再設計をする際の進め方について発表しました。

rince

March 26, 2024
Tweet

More Decks by rince

Other Decks in Technology

Transcript

  1. • 実例を通してデータベースやアーキテクチャを再設計をする際の進め方が わかる ◦ 設計理論 ← 既に巷にいい資料がたくさん ◦ 設計の進め方の一例 •

    あらゆる商品を扱う商品データベースの仕組みが少しわかる ◦ 時間の関係で詳細までは解説できず… この発表でわかること
  2. • データ量が増える • トラフィックが増える • 使われ方が変わる • 機能が増える リリース時は負債ではなかったがサービスの成長に伴い負債となった 技術的負債

    リリース時に 認知していた負債 リリース時に 認知していない負債 そもそも負債だと 思っていなかった 環境変化により 技術的負債になった ※1:mkitahara, 技術的負債の発生と返し方の判断基準 未認知の技術的負債(※ 1)
  3. ①課題抽出 ステークホルダーを整理する コンテンツ制作チーム ユーザー PO 機能要望 サービス利用 開発チーム A, B,

    C 機能追加 商品DB 品質管理チーム・オペチーム 検証データの登録 項目の定義 スペック情報の登録
  4. • 技術的な制約 • ビジネス上の制約 • 影響力のある機能要求 • 品質特性の要求 ASR: Architecturally

    Significant Requirement ②要件定義 アーキテクチャ上重要な要求(ASR)を明らかにする
  5. • 技術的な制約 • ビジネス上の制約 • 影響力のある機能要求 • 品質特性の要求 ◦ パフォーマンス:キャッシュが切れても1秒以内にレスポンスを返す

    ◦ パフォーマンス:Adminで40秒かかっているページを数秒以内にする ◦ 可用性:検索の仕組みが応答しない場合でも数十秒以内に復旧する ◦ スケーラビリティ:商品数が今のペースで3年増えても耐えうる ②要件定義 アーキテクチャ上重要な要求(ASR)を明らかにする 品質特性についての一例(他の項目は時間の関係で割愛)
  6. • 課題を解決するための実現方法について各種技術を調査 ◦ MUST ▪ 検索性・パフォーマンス ▪ 動的なフィールド追加 ▪ スケーラビリティ

    ◦ WANT ▪ ファセット検索 ▪ 各フィールドでの並び替え ③技術調査・設計 実現方法について技術調査する
  7. • MUSTの要件を満たすものの中でさらに詳細にPros/Consを比較し決定する ◦ 今の状況に必要十分な設計・アーキテクチャを選ぶ • 今回のケースでは ◦ ElasticsearchとAlgoliaがともにMUST要件を満たしたが、WANT要件や今後 の拡張性を考え、Elasticsearchを選択 •

    設計方針 ◦ ボトルネックとなっているテーブル構造を見直す ◦ Elasticsearchを導入し、絞り込みや並び替えはElasticsearchに任せる ③技術調査・設計 設計・アーキテクチャを決定する
  8. • 設計の内容をDesign Docsにまとめる ◦ プロジェクトの背景・目的・設計・検討した代替案などを書く ◦ 関係者と共有・議論することで、事前に全体を考察し、精度を高め、 開発後の手戻りを防ぐ • 特に検討した代替案が重要

    ◦ ADR(Architecture Decision Record)でも可 ◦ 他にどんな選択肢があり、なぜこの設計を選んだのかをコンテキスト とともに記録する ③技術調査・設計 設計・アーキテクチャを共有する
  9. • 並行稼働するためにテーブルに新形式かどうかのフラグを追加 ◦ フラグがONなら新形式 ◦ 新旧両方のテーブルに書き込みを行い、サービスを止めずにデータ移行 ◦ 影響の少ないカテゴリから実施 ◦ フラグをOFFにすれば切り戻せる

    • 本番と同じデータのレビュー環境で移行を試し、 担当者に使ってみてもらって問題ないことを確認 ④開発・データ移行 サービスを止めずに既存データを安全に新形式に移行する