ShopifyがRedisをMySQLに置き換え在庫管理をスケール
मूल शीर्षक: Shopify replaced Redis with MySQL for inventory reservations–and it scaled
यह क्यों महत्वपूर्ण है
大規模ECにおけるRedisからMySQLへの在庫管理移行の実証事例として、データベース設計のベストプラクティスに広く影響を与える可能性がある。
Shopifyは2025年のBlack Fridayピーク時(毎分510万ドルの売上)に対応するため、在庫予約システムをRedisからMySQL 8へ移行。SKIP LOCKEDや複合主キーを活用し、高スループット目標を達成したと2026年5月12日に発表した。
Shopifyはエンジニアリングブログにて、チェックアウト時の在庫予約システムをRedisからMySQLへ移行した経緯と技術的詳細を公開した。
チェックアウト時に「購入を完了する」ボタンが押されると、システムは在庫の二重販売(oversell)を防ぐため、支払い処理中に一時的な在庫の「予約(Reserve)」を行い、支払い成功後に正式な「確定(Claim)」を行う仕組みとなっている。
2025年のBlack Fridayでは、ピーク時に毎分510万ドルという記録的な売上を達成しており、このすべてのトランザクションが在庫システムを経由する。以前はRedisでこの処理を担っていたが、Shopifyが統一データベース戦略へ移行する中で、MySQLが同等のスケールに対応できるか検証が必要となった。
過去の試みでは、数量を1行で管理する単純な設計では競合(contention)が発生し失敗に終わっていた。今回の解決策として、MySQL 8の「SKIP LOCKED」機能を活用し、アイテムごとに1行ではなく在庫ユニットごとに1行を持つ設計を採用。37signalsのデータベースベースの負荷分散アプローチにヒントを得て再設計し、2025年のピークトラフィックで高スループット目標を達成した。
また、移行過程で判明した重要な教訓として、実際のボトルネックは当初観測・計測していた箇所ではなく別の場所にあったことも明らかにされている。