返回

在庫更新モジュールにおけるホットスポット行の高速デッドロックレス更新

见解分享

はじめに

在庫更新モジュールはデータベースの密集型モジュールであり、常に在庫更新操作が行われています。現在、オンライン在庫は独立した Oracle データベースを使用しており、短期的なビジネスのニーズには対応していますが、考拉事業の継続的な成長に伴い、データベースのパフォーマンスのボトルネックが顕著になりつつあります。特に、同じ行レコードに対するデータベースのホットスポット更新が喫緊の課題になっています。したがって、在庫管理では、ホットスポット商品の在庫を減らすための仕組みが実装されました。

従来のアプローチの課題

従来のアプローチでは、在庫更新は single-threaded で行われていました。つまり、あるスレッドが在庫レコードを更新している間、他のスレッドは待機しなければなりませんでした。このアプローチでは、在庫がホットスポット商品になると、デッドロックやタイムアウトが発生することがよくありました。

ホットスポット行のデッドロックレス高速更新

これらの課題に対処するため、以下のようなホットスポット行のデッドロックレス高速更新メカニズムが実装されました。

  1. 在庫ロックテーブルの作成: ホットスポット商品を表す在庫ロックテーブルが作成されました。このテーブルには、在庫がホットスポット商品であるかどうかを示すフラグが含まれています。
  2. ロックの取得: 在庫レコードを更新する前に、対応するロックレコードが在庫ロックテーブルから取得されます。ロックレコードが取得できない場合、在庫レコードはホットスポット商品としてマークされ、別のメカニズムを使用して更新されます。
  3. 更新の実行: 在庫レコードに対する更新は、ロックレコードを取得したスレッドによって実行されます。更新が完了すると、ロックレコードは解放されます。

排他ロックの回避

このメカニズムでは、排他ロックを使用することなく、ホットスポット行を更新できます。これにより、デッドロックのリスクが軽減されます。さらに、ロックレコードはメモリに格納されるため、データベースのパフォーマンスが向上します。

長尾在庫商品への適用

ホットスポット更新メカニズムは、長尾在庫商品にも適用できます。長尾在庫商品は、在庫が少なく、需要が低い商品です。このような商品は、ホットスポット商品ほど頻繁に更新されません。そのため、在庫ロックテーブルのフラグを使用して、長尾在庫商品を特定し、更新を最適化できます。

パフォーマンスの向上

ホットスポット行のデッドロックレス高速更新メカニズムを実装することで、在庫更新モジュールの全体的なパフォーマンスが大幅に向上しました。デッドロックの発生が減少し、更新の処理時間が短縮されました。その結果、在庫の可用性が向上し、ユーザーエクスペリエンスが向上しました。