後書きキャッシング

後書きキャッシングを使用して、バックエンドとして使用しているデータベースを更新する際に発生するオーバーヘッドを減らすことができます。

後書きキャッシングの概要

後書きキャッシングでは、Loader プラグインの更新が非同期にキューに入れられます。eXtreme Scale トランザクションをデータベース・トランザクションから分離することにより、マップの更新、挿入、および除去の、パフォーマンスを改善できます。非同期更新は、時間ベースの遅延 (例えば 5 分) またはエントリー・ベースの遅延 (例えば 1000 エントリー) 後に実行されます。

図 1. 後書きキャッシング
ローダーを使用する後書きキャッシング

BackingMap の後書き構成により、 ローダーとマップとの間にスレッドが作成されます。次に、 ローダーは、BackingMap.setWriteBehind メソッド内の構成設定に従って、そのスレッドを通してデータ要求を委任します。eXtreme Scale トランザクション が、マップのエントリーを挿入、更新、または削除すると、これらの各レコードごとに 1 つずつ LogElement オブジェクトが 作成されます。これらのエレメントは 後書きローダーに送信され、キュー・マップと呼ばれる特別な ObjectMap 内で キューに入れられます。後書き設定が有効になっているバックアップ・マップは、それぞれ独自のキュー・マップを持っています。後書きスレッドは、キューに入れられたデータをキュー・マップから定期的に除去して、実際のバックエンド・ローダーにプッシュします。

後書きローダーは、挿入、更新、および削除 タイプの LogElement オブジェクトのみを実際のローダーに送信します。それ以外のタイプの LogElement オブジェクト (例えば、EVICT タイプ) はすべて無視されます。

後書きサポートは、eXtreme Scale をデータベースに組み込む際に使用する Loader プラグインの 拡張機能です。例えば、JPA ローダーの構成については JPA ローダーの構成 の情報を参照してください。

利点

後書きサポートを使用可能にすると、以下のような利点があります。
  • バックエンド障害の分離: 後書きキャッシング は、バックエンド障害からの分離層を提供します。バックエンドのデータベースで障害が発生すると、更新はキュー・マップ内でキューに入れられます。アプリケーションは、トランザクションを eXtreme Scale に送り続けることができます。バックエンドが復旧すると、キュー・マップ内の データはバックエンドにプッシュされます。
  • バックエンドの負荷の削減: 後書きローダー は更新をキー単位でマージします。その結果、キュー・マップ内には、キーごとにマージされた更新が 1 つのみ存在します。このマージにより、バックエンド・データベース に対する更新の数が減ります。
  • トランザクション・パフォーマンスの改善: データがバックエンドと同期されるのをトランザクションが待機する必要がないので、個別の eXtreme Scale トランザクション時間が削減されます。