データ・レコードは、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パラメータでは、スペル辞書を更新するタイミングを指定できます。
- 設定がtrueの場合、収集後ただちに辞書の更新が実施されます。
- 設定がfalseの場合、辞書の更新は無効です。後で辞書を更新できます。詳細は、「データ・ドメインのスペル辞書の更新」を参照してください。
複数のバルク・ロード操作を連続して実行する場合は、最後以外のすべての操作で両方のプロパティをfalseに設定できます。