バルク・ロードAPIについて

データ・レコードは、Dgraphのバルク・ロード・インタフェースを使用して追加または置換できます。

データ・インジェストAPIに加え、バルク・ロード・インタフェースを使用してEndecaデータ・ドメインにレコードを収集できます。バルク・ロードAPIは、単一のendeca_bulk_load.jarファイル(Endeca Serverのapisディレクトリ内)に含まれる一連のJavaクラスの形式で存在します。バルク・ロードAPIのJavadocは、apis/doc/bulk_loadディレクトリにあります。

バルク・ロードの特徴

インタフェースの特徴を次に示します。
  • APIがロードできるのは、データ・ソース・レコードのみです。PDR、DDR、管理属性値、GCRまたはDgraphの構成ドキュメントはロードできません。
  • Endecaデータ・ドメインの既存データは、更新ではなく置換されます。つまり、置換操作は付加的ではありません。そのため、受信レコードのキー/値ペアのリストによって、既存レコードのキー/値ペアのリストが完全に置換されます。
  • 追加または置換されるレコードごとに、主キー属性(レコード指定子とも呼ばれる)が必要です。
  • Endecaデータ・ドメインに存在しない標準属性(プロパティ)を割り当てる場合、新しい標準属性が自動的に作成されます(PDRにはシステムのデフォルト値を使用)。このデフォルト値の詳細は、 「新規属性のデフォルト値」を参照してください。
  • ソース・レコードの最大サイズは、128MBに制限されています。128MBより大きいソース・レコードを収集しようとすると失敗して、エラーが(拒否されたレコードのレコード指定子とともに)返されますが、バルク・ロード収集はその拒否されたレコードの後も続行されます。
インタフェースでは、収集時に非XML 1.0の文字列が拒否されます。つまり、収集に有効な文字列は、XML 1.0仕様のproduction 2に準拠している文字列である必要があります。無効な文字列が検出されると、次のエラー・メッセージを伴う例外がスローされます。
Character <c> is not legal in XML 1.0

無効な文字列を含むレコードが拒否されました。

ロギングの実装

BulkIngesterクラスは、Endecaデータ・ドメインにデータをロードするための、クライアント側バルク・インタフェースのプライマリ・エントリ・ポイントです。BulkIngesterでは、java.util.loggingパッケージを使用して、デバッグ目的でロギングの一部を出力します。(クライアントには、Callbackクラスを介したデバッグ・メッセージと、Exceptionメッセージが表示されます。)

プログラムのロギングを実装するために、Apache CommonsロギングやSimple Logging Facade for Java (SLF4J)など、他のロギング・ライブラリを使用できます。詳細は、各ロギング・コンポーネントに付属しているドキュメントを参照してください。

SSL接続の実装

BulkIngesterコンストラクタのsocketFactoryパラメータには、バルク収集操作用のソケットを作成する際に使用されるソケット・ファクトリを設定できます。したがって、クライアントでは事前に構成された独自のSocketFactoryを指定できます。これはSSLの場合に特に役に立つため、このパラメータを使用してSSL接続にSSLSocketFactoryを指定できます。

サンプル・プログラムでは、次のように2つのJavaソケット・クラスをインポートし、socketFactoryパラメータを設定します。
import javax.net.SocketFactory;
import javax.net.ssl.SSLSocketFactory;
...
public BulkLoad(String host, int port, boolean ssl) throws IOException {
		_host = host;
		_port = port;
		BulkLoadCallback blcb = new BulkLoadCallback();

		SocketFactory sf = ssl ? SSLSocketFactory.getDefault() : SocketFactory.getDefault();
...

受信sslブール・パラメータの値がtrueの場合、sfは環境のデフォルトSSLソケット・ファクトリのコピーに設定されます。それ以外の場合、デフォルト非SSLソケット・ファクトリのコピーに設定されます。

収集後の動作

バルク・ロード収集を行うたびに、次の2つの操作を後で実行する必要があります。
  • 収集されたレコードを1つの生成にマージします(これにより、データベースが再度索引付けされ、問合せのパフォーマンスが最適化されます)。
  • aspellのスペル辞書を再構築します(新たに追加されたデータをスペルのDYMと自動修正で利用できるようにするため)。
BulkIngesterコンストラクタのdoFinalMergeパラメータでは、収集後のマージを行うタイミングを設定できます。
  • 設定がtrueの場合、収集後ただちにマージが実施されます。この動作によって、定期的にスケジュールされた更新期間中に発生する膨大な同種データの1回の更新が終了したときに、問合せのパフォーマンスを最大化します。
  • 設定がfalseの場合、更新終了時にマージは実施されず、かわりに通常のバックグラウンドのマージ・プロセスに従って、生成が経時的に保持されます。この動作は、更新全体での遅延の低下が重視される異種データの並列更新により適しています。
BulkIngesterコンストラクタのdoUpdateDictionaryパラメータでは、スペル辞書を更新するタイミングを指定できます。

複数のバルク・ロード操作を連続して実行する場合は、最後以外のすべての操作で両方のプロパティをfalseに設定できます。