第42章 データの相互運用性
42.1. プロトコルの相互運用性
42.1.1. プロトコルの相互運用性
Red Hat JBoss Data Grid のプロトコルの相互運用性により、C++ または Java などの各種プログラミング言語で書かれた REST、Memcacherd、および Hot Rod などの各種プロトコルによる、raw バイト形式のデータへの読み書きアクセスを可能にします。
デフォルトで、各プロトコルはそのプロトコルの最も効率的な形式でデータを保存し、エントリーの取得時に変換が必要とならないようにします。このデータを複数のプロトコルからアクセスする必要がある場合、互換性モードは、共有されるキャッシュで有効にされる必要があります。
互換性モードの有効化
互換性モードを有効にする手順は、『Administration and Configuration Guide』を参照してください。
42.1.2. ユースケースおよび要件
以下の表は、Red Hat JBoss Data Grid におけるデータ相互運用性の一般的なユースケースを示しています。
ユースケース | クライアント A (リーダーまたはライター) | クライアント B (クライアント A に対する書き込み/読み取りクライアント) |
---|---|---|
1 |
Memcached |
Hot Rod Java |
2 |
REST |
Hot Rod Java |
3 |
Memcached |
REST |
4 |
Hot Rod Java |
Hot Rod C++ |
5 |
Hot Rod Java |
Hot Rod C# |
6 |
Memcached |
Hot Rod C++ |
これらのユースケースでは、マーシャルはユーザーの判断に委ねられます。JBoss Data Grid は byte[] を格納し、ユーザーはこれを意味のあるデータにマーシャルまたはアンマーシャルします。
たとえばユースケース 1 の場合、相互運用性は Memcached クライアント (A) と Hot Rod Java クライアント (B) の間になります。クライアント A が Person
インスタンスなどのアプリケーション固有のオブジェクトをシリアライズする場合、String をキーとして使用できます。
以下の手順はすべてのユースケースに適用されます。
クライアント A 側
-
A は Protobuf や Avro などのサードパーティーマーシャラーを使用して
Person
の値を byte[] にシリアライズします。UTF-8 でエンコードされた文字列をキーとして使用する必要があります (Memcached プロトコルの要件のため)。 - A はキーバリューペアをサーバーに書き込みます (キーを UTF-8 文字列、値をバイトアレイとして)。
クライアント B 側
-
B は特定キー (String) の
Person
を読み取る必要があります。 - B は同じ UTF-8 キーを対応する byte[] にシリアライズします。
-
B は
get(byte[])
を呼び出します。 - B はシリアライズされたオブジェクトを表す byte[] を取得します。
-
B は A と同じマーシャラーを使用して byte[] を対応する
Person
オブジェクトにアンマーシャルします。
- ユースケース 4 では、Hot Rod Java クライアントに含まれる Protostream Marshaller の使用が推奨されます。Hot Rod C++ クライアントでは、Google の Protobuf Marshaller (https://developers.google.com/protocol-buffers/docs/overview) が推奨されます。
- ユースケース 5 では、デフォルトの Hot Rod マーシャラーを使用できます。
42.1.3. REST 上のプロトコル相互運用性
JBoss Data Grid の REST インターフェースは、データを格納および読み出しするために Hot Rod および Memcached クライアントがアクセスできるキャッシュを公開します。
各キャッシュは、メディアタイプによって定義された設定可能な形式でデータを格納します。JBoss Data Grid では、クライアントは異なる形式でデータを読み書きでき、必要時に形式を自動的に変換できます。
デフォルトのメディアタイプやメディアタイプの変換などが含まれる REST API の詳細は、『The REST API』を参照してください。