主コンテンツへ
Oracle® Fusion Middleware Oracle GoldenGate for Big Dataの統合
リリース12.3.1.1
E89944-01
目次へ移動
目次

前
次

12 MongoDBハンドラの使用

この章では、MongoDBハンドラについて説明し、その機能を理解できるように例を示します。

トピック:

12.1 概要

MongoDBは、高パフォーマンス、高可用性および自動スケーリングを提供するオープン・ソースのドキュメント・データベースです。

詳細は、次に示すMongoDBのWebサイトを参照してください。

https://www.mongodb.com/

MongoDBハンドラを使用して、Oracle GoldenGate証跡からターゲットMongoDBデータベースにトランザクション・データを複製できます。

12.2 詳細な機能

MongoDBハンドラは、ソース証跡ファイルから操作を取得し、対応するドキュメントをターゲットMongoDBデータベースに作成します。

MongoDBでは、レコードバイナリJSON (BSON)ドキュメントで、フィールドと値のペアで構成されるデータ構造です。BSONデータ構造は、JSONドキュメントのバイナリ形式です。MongoDBドキュメントはJSONオブジェクトに似ています。フィールドの値には、他のドキュメント、配列、およびドキュメントの配列を含めることができます。

コレクションは、MongoDBドキュメントをグループ化したもので、RDBMSの表に相当します。MongoDBでは、データベースはドキュメントのコレクションを保持します。コレクションはスキーマを強制しません。コレクション内のMongoDBドキュメントは、異なるフィールドを持つことができます。

トピック:

12.2.1 ドキュメント・キー列

MongoDBデータベースでは、すべてのドキュメント(行)に_idという名前の列が必要で、この列の値はコレクション(表)内で一意である必要があります。これは、RDBMS表の主キーに似ています。挿入時に、ドキュメントに最上位の_id列が含まれていない場合、MongoDBドライバによってこの列が追加されます。

MongoDBハンドラは、証跡レコードの主キー列値に基づいて、すべてのドキュメントのカスタム_idフィールド値を構築します。このカスタム_id は、: (コロン)セパレータで連結されたすべてのキー列値を使用して構築されます。次に例を示します。

KeyColValue1:KeyColValue2:KeyColValue3

MongoDBハンドラは、このカスタム_id値に基づいて、一意性を強制します。つまり、証跡のすべてのレコードが、主キー列値に基づいて一意である必要があります。同じ表に一意でないレコードが存在すると、MongoDBハンドラ障害が発生し、Replicatは重複キー・エラーで異常終了します。

_idフィールドの動作は次のとおりです。

  • デフォルトでは、MongoDBは、コレクションの作成時に列の一意の索引を作成します。

  • これは常にドキュメントの最初の列になります。

  • 配列を除く任意のBSONデータ型の値を使用できます。

12.2.2 主キーの更新操作

MongoDBデータベースでは、 _id列の変更は許可されていません。つまり、証跡内の主キーの更新操作レコードには、特別な処理が必要です。MongoDBハンドラは、主キーの更新操作をDELETE (古いキー)とINSERT (新しいキー)の組合せに変換します。INSERTを実行するには、証跡内の更新操作の完全な操作前イメージが推奨されます。Oracle GoldenGateのGETUPDATEBEFORESおよびNOCOMPRESSUPDATESパラメータを有効にして、更新操作の完全な操作前イメージを移入する証跡を生成できます。『Oracle GoldenGateリファレンスfor Windows and UNIX』を参照してください。

12.2.3 MongoDB証跡のデータ型

MongoDBハンドラは、次に示すBSONデータ型への配信をサポートします。

  • 32ビット整数

  • 64ビット整数

  • Double

  • 日付

  • 文字列

  • バイナリ・データ

12.3 MongoDBハンドラの設定および実行

ここでは、MongoDBハンドラのコンポーネントの構成とハンドラの実行について説明します。

トピック:

12.3.1 クラスパス構成

MongoDB Java Driverは、Oracle GoldenGate for Big DataがデータからMongoDBに接続およびストリーミングするために必要です。MongoDB Java Driverの推奨バージョンは3.2.2です。MongoDB Java DriverはOracle GoldenGate for Big Dataのパッケージングに含まれていないため、次の場所からドライバをダウンロードする必要があります。

https://docs.mongodb.com/ecosystem/drivers/java/#download-upgrade

推奨されるドライバJARファイルをダウンロードするには、“mongo-java-driver"と、"3.2.2"バージョンを選択します。

実行時にMongoDB Java Driver JARをロードするには、gg.classpath変数を構成する必要があります。例: gg.classpath=/home/mongodb/mongo-java-driver-3.2.2.jar

12.3.2 MongoDBハンドラ構成

MongoDBハンドラの構成可能な値は次のとおりです。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)。

表12-1 MongoDBハンドラの構成プロパティ

プロパティ 必須/オプション 有効な値 デフォルト 説明

gg.handler.name.type

必須

mongodb

なし

Replicatで使用するMongoDBハンドラを選択します。

gg.handler.name.bulkWrite

オプション

true | false

true

trueに設定すると、コミット・トランザクション・イベントを受信するまで、ハンドラは操作をキャッシュします。トランザクション・イベントのコミット時に、キャッシュされたすべての操作がターゲットMongoDBデータベースに書き出され、スループットが向上します。

falseに設定すると、ハンドラ内でキャッシュは行われず、操作はただちにMongoDBデータベースに書き込まれます。

gg.handler.name.WriteConcern

オプション

{"w": "value" , "wtimeout": "number" }

なし

MongoDBハンドラで実行されるすべての操作に必要な書込み確認を設定します。

プロパティ値はJSON形式で、“w”および“wtimeout”のキーのみを受け入れます。

書込み確認の詳細は、https://docs.mongodb.com/manual/reference/write-concern/を参照してください。

gg.handler.name.username

オプション

有効なユーザー名の文字列。

なし

使用する認証ユーザー名を設定します。AuthenticationMechanismプロパティとともに使用します。

gg.handler.name.password

オプション

有効なパスワードの文字列。

なし

使用する認証パスワードを設定します。AuthenticationMechanismプロパティとともに使用します。

gg.handler.name.ServerAddressList

オプション

IP:PORT (複数のポート値はカンマで区切る)

なし

Replicatセット・メンバーのリストまたはMongoDBデータベースのリストへの接続を有効にします。

このプロパティは、[hostnames:port]のカンマ区切りリストを受け入れます。たとえば、localhost1:27017,localhost2:27018,localhost3:27019です。

詳細は、http://api.mongodb.com/java/3.0/com/mongodb/MongoClient.html#MongoClient-java.util.List-java.util.List-com.mongodb.MongoClientOptions-を参照してください。

gg.handler.name.AuthenticationMechanism

オプション

認証メカニズムのカンマ区切りリスト

なし

クライアントのアイデンティティを検証するプロセスである認証メカニズムを設定します。入力内容は、様々な認証オプションのカンマ区切りリストになります。たとえば、GSSAPI,MONGODB_CR,MONGODB_X509,PLAIN,SCRAM_SHA_1です。

認証オプションの詳細は、http://api.mongodb.com/java/3.0/com/mongodb/MongoCredential.htmlを参照してください。

gg.handler.name.source

オプション

有効な認証ソース

なし

ユーザー名のソース(通常はユーザーが定義されているデータベースの名前)を設定します。AuthenticationMechanismプロパティとともに使用します。

gg.handler.name.clientURI

オプション

有効なMongoDBクライアントURI

なし

MongoDBクライアントURIを設定します。クライアントURIは、認証やWriteConcernなど、他のMongoDB接続プロパティの設定にも使用できます。例: mongodb://localhost:27017/

クライアントURIの形式の詳細は、http://api.mongodb.com/java/3.0/com/mongodb/MongoClientURI.htmlを参照してください

gg.handler.name.Host

オプション

有効なMongoDBのサーバー名またはIPアドレス

なし

(単一の) MongoDBノードに基づいて、接続先のMongoDBデータベース・ホスト名を設定します。http://api.mongodb.com/java/3.0/com/mongodb/MongoClient.html#MongoClient-java.lang.String-を参照してください。

gg.handler.name.Port

オプション

有効なMongoDBポート

なし

MongoDBデータベース・インスタンス・ポート番号を設定します。Hostプロパティとともに使用します。

gg.handler.name.CheckMaxRowSizeLimit

オプション

true | false

false

trueに設定すると、ハンドラは、MongoDBデータベースで定義された制限に収まるように、挿入または変更されるBSONドキュメントのサイズを常にチェックします。サイズの計算は、RawBsonDocumentを生成するデフォルト・コーデックの使用を伴い、これによりMongoDBハンドラのスループットが少し低下します。

ドキュメントのサイズがMongoDBの制限を超えると、例外が発生し、Replicatが異常終了します。

12.3.3 接続および認証

ハンドラ・プロパティ・ファイルで構成される様々な接続プロパティまたは認証プロパティを使用できます。複数の接続プロパティが指定された場合、MongoDBハンドラは、次の優先順位に基づいてプロパティを選択します。

優先度1:
AuthentictionMechanism
UserName
Password
Source
Write Concern
優先度2:
ServerAddressList
AuthentictionMechanism
UserName
Password
Source
優先度3:
clientURI
優先度4:
Host
Port
優先度5:
Host

接続プロパティと認証プロパティを何も指定しないと、ハンドラは、ポート27017localhostへの接続を試行します。

12.3.4 一括書込みの使用

MongoDBハンドラでは、GROUPTRANSOPSパラメータを使用して、バッチ・サイズを取得します。証跡レコードのバッチは、MongoDBドキュメントのバッチに変換され、データベースへの1つのリクエストに書き込まれます。

BulkWriteハンドラ・プロパティを使用して、適用スループットを向上させるために一括書込みを有効化できます。デフォルトでは、これは有効で、ハンドラの最適パフォーマンスのための推奨設定になっています。

gg.handler.handler.BulkWrite=true | falseプロパティを使用して、一括書込みを有効または無効にします。Oracle GoldenGate for Big Dataのデフォルト・プロパティgg.handler.handler.mode=op | txは、MongoDBハンドラで使用されません

一括書込みを使用することをお薦めします。

12.3.5 書込み確認の使用

書込み確認は、スタンドアロンMongoDB、レプリカ・セットおよびシャード・クラスタへの書込み操作に関してMongoDBからリクエストされた確認のレベルを説明します。シャード・クラスタを使用して、mongosインスタンスは書込み確認をシャードに渡します。

次の構成を使用します。

w: value
wtimeout: number

https://docs.mongodb.com/manual/reference/write-concern/

12.3.6 3部構成の表名の使用

Oracle GoldenGate証跡では、Catalog.Schema.Tableなど、3部構成の表名をサポートするソースのデータが存在する場合があります。MongoDBは、DBName.Collectionなど、2部構成の名前のみをサポートします。ソースの3部構成の名前からMongoDBの2部構成の名前へのマッピングをサポートするには、ソースのCatalogSchemaをアンダースコア区切り文字で連結して、MongoのDBNameを構成します。

たとえば、Catalog.Schema.Tablecatalog1_schema1.table1になります。

12.3.7 元に戻す処理の使用

MongoDB Handlerハンドラは、軽量のundoエンジンを使用して、一括書込みエラーから回復できます。このエンジンは、通常のRDBMSのundoエンジンで提供される機能を提供するのではなく、どちらかといえばエラー・リカバリに役立つよう最善を尽くします。エラー・リカバリが正常に動作するのは、MongoDBデータベースがBulkWriteExceptionによって障害の場所に関する情報を提供できる主な違反や他の一括書込みエラーがある場合です。

表12-2では、この機能を最大限に利用するための要件を示します。

表12-2 Undo処理の要件

元に戻す処理 証跡に完全な操作前イメージが必要か。

INSERT

いいえ

DELETE

はい

UPDATE

いいえ(SET句のフィールドの操作前イメージ。)

undo操作中にエラーが発生した場合、MongoDBコレクションを一貫性のある状態にすることができない可能性があるため、手動でのデータの調整が必要になることがあります。

12.4 サンプル構成

Javaアダプタ・プロパティ・ファイルからのMongoDBハンドラの構成例を次に示します。

gg.handlerlist=mongodb
gg.handler.mongodb.type=mongodb

#The following handler properties are optional.
#Please refer to the Oracle GoldenGate for BigData documentation
#for details about the configuration.
#gg.handler.mongodb.clientURI=mongodb://localhost:27017/
#gg.handler.mongodb.Host=<MongoDBServer address>
#gg.handler.mongodb.Port=<MongoDBServer port>
#gg.handler.mongodb.WriteConcern={ w: <value>, wtimeout: <number> }
#gg.handler.mongodb.AuthenticationMechanism=GSSAPI,MONGODB_CR,MONGODB_X509,PLAIN,SCRAM_SHA_1
#gg.handler.mongodb.UserName=<Authentication username>
#gg.handler.mongodb.Password=<Authentication password>
#gg.handler.mongodb.Source=<Authentication source>
#gg.handler.mongodb.ServerAddressList=localhost1:27017,localhost2:27018,localhost3:27019,...
#gg.handler.mongodb.BulkWrite=<false|true>
#gg.handler.mongodb.CheckMaxRowSizeLimit=<true|false>

goldengate.userexit.timestamp=utc
goldengate.userexit.writers=javawriter
javawriter.stats.display=TRUE
javawriter.stats.full=TRUE
gg.log=log4j
gg.log.level=INFO
gg.report.time=30sec

#Path to MongoDB Java driver.
# maven co-ordinates
# <dependency>
# <groupId>org.mongodb</groupId>
# <artifactId>mongo-java-driver</artifactId>
# <version>3.2.2</version>
# </dependency>
gg.classpath=/path/to/mongodb/java/driver/mongo-java-driver-3.2.2.jar
javawriter.bootoptions=-Xmx512m -Xms32m -Djava.class.path=.:ggjava/ggjava.jar:./dirprm