第8章 Avroバインディング

目次

Avroバインディングの概要
汎用バインディング
1つの汎用スキーマ・バインディングの使用
複数の汎用スキーマ・バインディングの使用
埋込みレコードの使用
汎用スキーマの動的管理
固有バインディング
Avro固有クラスの生成
Avro固有バインディングの使用
複数のAvro固有バインディングの使用
JSONバインディング
AvroのJSONバインディングの使用
JSONレコードでのJSONバインディングの使用

スキーマを定義したら(「Avroスキーマ」で説明)、Oracle NoSQL Databaseアプリケーションで次のように使用します。

  1. ストアにスキーマを追加します。この手順の詳細は、「ストアのAvroスキーマの管理」を参照してください。

  2. アプリケーションに対してスキーマを指定します。

  3. Avroデータ形式を使用するOracle NoSQL Databaseの値をシリアライズまたはデシリアライズします。シリアライズ関数を実行するには、Avroバインディングを使用します。使用可能なバインディングは他にもありますが、それぞれにプラス面とマイナス面があります。

それ以外は、値にAvroデータ形式を使用するからといって、ストアのレコードの読取り/書込み/削除方法が変わることはありません。Avroがコードに与える影響は、値の管理に関する部分のみです。

次の各項では、データのシリアライズとデシリアライズに使用するバインディングについて説明します。使用するバインディングによって、ストアにスキーマを提供する方法が決まります。

Avroバインディングの概要

Avroデータ形式を使用しているストアの値のシリアライズとデシリアライズに使用可能なバインディングは4つあります。各バインディングには長所と短所があります。次の各項では、4つのうちの3つについて詳しく説明します。4つのバインディングを簡単に説明すると、次のとおりです。

  • 汎用

    汎用バインディングは、用途の広いバインディングです。汎用バインディングでは、単純な文字列でフィールドに名前を付け、読取りおよび書き込み対象のフィールドを特定します。これにより、ある程度汎用的にバインディングを使用できますが、アプリケーションのコンパイル時に型の安全性が失われます。

    Avroを使用し始めたばかりで、他のバインディングを優先する理由が特にない場合は、汎用バインディングから始めるといいでしょう。

    汎用バインディングについては、「汎用バインディング」で説明します。

  • 固有

    固有バインディングでは、Antツールを使用してユーザーのスキーマ仕様から生成されたクラスを使用します。生成されたクラスでは、getterメソッドとsetterメソッドを使用してスキーマ内のフィールドを管理できます。プログラミング手法として、固有スキーマは、これまでの経験で使い慣れたプログラミング・スタイルと言えるでしょう。

    汎用バインディングやJSONバインディングとは異なり、固有バインディングでは、コンパイル時の前にストアのスキーマ全体をユーザーが把握している必要があります。これは、固有バインディングでは、Antから呼び出し可能なAvroツールを使用してユーザーのスキーマ仕様から生成されたクラスを使用するため、ストアで使用されている全スキーマのセットをアプリケーションが動的に検出できないからです。

    固有バインディングについては、「固有バインディング」で説明します。

  • JSON

    JSONバインディングの動作は汎用バインディングと似ていますが、サポートしているAvroデータ型が少ないです。JSONバインディングは、JSONオブジェクトを公開するため、Oracle NoSQL Databaseのクライアント・コードをJSON指向のシステムに統合する場合に最も役立ちます。

    JSONバインディングについては、「JSONバインディング」で説明します。

  • RAW

    RAWバインディングは、低水準のAvro APIを使用して、オブジェクトのシリアライズとデシリアライズを可能にする高度な機能です。RAWバインディングは、なんらかの理由で他の3つの組込みバインディングが機能しない場合に使用します。RAWバインディングを使用するには、Avro APIセットを十分に理解している必要があります。したがって、その使用に関してはこのマニュアルの範囲外です。

読取りと書込みには別々のバインディングを使用できることに注意してください。Avroデータ形式(ストアに配置されるデータに対して実際に使用されるもの)はバインディングに依存しません。別の言い方をすれば、バインディングはAvroデータ形式の読取りと書込みの方法を認識していますが、データ形式にはバインディングの情報がありません。