1.2. Protobuf キャッシュエンコーディング

Protocol Buffers(Protobuf) は、構造化されたデータの軽量バイナリーメディアタイプです。キャッシュエンコーディングとして、Protobuf は Hot Rod および REST エンドポイントの両方について、異なるプログラミング言語でのクライアントアプリケーション間で優れたパフォーマンスと相互運用性を提供します。

Data Grid は ProtoStream ライブラリーを使用して、キャッシュを application/x-protostream メディアタイプで Protobuf としてエンコードします。

以下の例は、Person オブジェクトを記述する Protobuf メッセージを示しています。

message Person {
    optional int32 id = 1;
    optional string name = 2;
    optional string surname = 3;
    optional Address address = 4;
    repeated PhoneNumber phoneNumbers = 5;
    optional uint32 age = 6;
    enum Gender {
        MALE = 0;
        FEMALE = 1;
    }
}
注記

Protobuf は循環オブジェクトをサポートしていません。Java シリアライゼーションまたは JBoss Marshalling を使用して循環オブジェクトをマーシャリングします。

相互運用性

Protobuf エンコーディングは言語に依存しないことから、Data Grid は Java、C++、C#、Python、Go などで書かれたクライアントアプリケーションからのリクエストを処理できます。

Protobuf を使用すると、異なるリモートエンドポイントのクライアント (Hot Rod または REST) が同じデータで操作できます。REST API を使用するため、Data Grid Console を使用して Protobuf でエンコードされたキャッシュにアクセスして作業できます。

注記

application/x-protostream 以外のバイナリーエンコーディングで Data Grid Console を使用することはできません。

アプリケーションとサービス間の通信を可能にするため、すべての Red Hat テクノロジーとの統合には、常に Protobuf キャッシュエンコーディングを application/x-protostream メディアタイプと共に使用する必要があります。

クエリー

Data Grid には、高速で信頼できるクエリーのために、キャッシュ内のデータの構造化表現が必要です。Ickle クエリー言語でキャッシュを検索するには、オブジェクトを記述する Protobuf スキーマを登録します。

カスタムタイプ

Data Grid には、String および Integer を含む頻繁に使用されるタイプに対するネイティブサポートを持つ ProtoStream API の実装が含まれています。カスタムタイプをキャッシュに保存する場合は、ProtoStream マーシャリングを使用して、シリアル化コンテキストを生成して Data Grid で登録し、オブジェクトをマーシャリングできるようにします。

1.2.1. ProtoStream としてのキャッシュのエンコード

ProtoStream ライブラリーを使用して、キャッシュエントリーを Protocol Buffers(Protobuf) として保存するように Data Grid を設定します。

手順

  • キーおよび値の application/x-protostream メディアタイプを指定します。

宣言的

<distributed-cache>
   <encoding>
      <key media-type="application/x-protostream"/>
      <value media-type="application/x-protostream"/>
   </encoding>
</distributed-cache>

プログラマティック

//Create cache configuration that encodes keys and values as ProtoStream
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.clustering().cacheMode(CacheMode.DIST_SYNC)
       .encoding().key().mediaType("application/x-protostream")
       .encoding().value().mediaType("application/x-protostream");

または、キーと値に同じエンコーディングを使用できます。

宣言的

<encoding media-type="application/x-protostream"/>

プログラマティック

.encoding().mediaType("application/x-protostream");