第1章 キャッシュエンコーディングの設定
さまざまなメディアタイプで Data Grid キャッシュを設定する方法と、エンコーディングが Data Grid を使用する方法に与える影響について説明します。
1.1. キャッシュエンコーディング
エンコーディングは、メディアタイプで識別される形式です。これは、Data Grid がエントリー (キー/値のペア) をキャッシュに格納するために使用する形式です。
リモートキャッシュ
Data Grid Server は、キャッシュ設定に設定されるエンコーディングを使用してリモートキャッシュにエントリーを保存します。
Hot Rod および REST クライアントには、Data Grid Server に対して行う各要求を持つメディアタイプが含まれます。異なるメディアタイプで読み書き要求を行う複数のクライアントを処理するには、Data Grid Server は、データをオンデマンドで、キャッシュ設定で設定されているメディアタイプとの間で変換します。
リモートキャッシュにエンコーディング設定がない場合、Data Grid Server はメディアタイプの情報なしにキーおよび値を汎用 byte[]
として保存します。これにより、異なる形式を要求するクライアントのデータを変換する際に予期せぬ結果が生じる可能性があります。
ProtoStream エンコーディングの使用
Data Grid Server は、クライアントの要求に、キャッシュ設定で設定されるメディアタイプとの間で変換できないメディアタイプが含まれる場合に、エラーを返します。
Data Grid は、Data Grid Console、CLI、Hot Rod、REST などの複数のクライアントを使用する場合は、application/x-protostream
メディアタイプでキャッシュエンコーディングを常に設定することを推奨しています。ProtoStream エンコーディングでは、サーバー側のタスクを使用し、リモートキャッシュでインデックス化されたクエリーを実行することもできます。
組み込みキャッシュ
Data Grid は、デフォルトで Plain Old Java Objects(POJO) として埋め込みキャッシュにエントリーを保存します。
クラスター化された組み込みキャッシュの場合、Data Grid はすべての POJO をノード間で複製し、その後に POJO にアンマーシャリングできるバイトアレイにマーシャリングする必要があります。つまり、別のマーシャラーを設定しない場合は、Data Grid が ProtoStream マーシャラーで POJO をシリアライズできるようにする必要があります。
ミュータブルな POJO を組み込みキャッシュに保存する場合は、常に新しい POJO インスタンスを使用して値を更新する必要があります。たとえば、HashMap
をキー/値のペアとして保存すると、Data Grid クラスターの他のメンバーには、マップへのローカル変更は表示されません。さらに、Data Grid がオブジェクトをマーシャリングするのと当時にマップインスタンスが更新されると、ConcurrentModificationException
が発生する可能性があります。