9 Oracle Database API for MongoDBの有効化と構成
この項では、Oracle Database API for MongoDBを有効化および構成する方法について説明します。
ORDSリリース22.3以降、Oracle REST Data Servicesでは、スタンドアロン・モードで実行する場合、MongoDBのためのOracle Database APIがサポートされています。これにより、MongoDBドライバ、フレームワークおよびツールを使用して、Oracle Databaseに対してJSONドキュメント・ストア・アプリケーションを開発できます。MongoDBのためのOracle Database APIは、MongoDBワイヤ・プロトコルを、ORDS接続プールを使用して実行されるSQL文に変換します。
図9-1 MongoDBのためのOracle Database APIのアーキテクチャ図
- データベースのMongoDBの概念は、Oracle Databaseのスキーマの概念にマップされています。具体的には、ORDS対応のスキーマです。たとえば、データベース
foo内のコレクションにJSONドキュメントを挿入するときは、MongoDB用APIにより、ORDS対応スキーマfoo内のコレクションにドキュメントが挿入されます。 - MongoDBのためのAPIを使用する場合の認証および認可は、MongoDBユーザーではなく、Oracle Databaseユーザーおよびアクセス制御に依存します。MongoDBクライアントを接続する場合、接続オプション
authMechanism=PLAINおよびauthSource=$externalを使用して、MongoDBのLDAP認証メカニズムを使用してOracle Database資格証明を指定する必要があります。プロトコルはユーザー名とパスワードをプレーン・テキストとして渡すため、接続オプションtls=trueを使用してTLS/SSLを有効にする必要があります。 - MongoDBのためのOracle APIは、MongoDBコマンドを、コレクションを支える表上の対応するSQL文にマップします。
たとえば、
emp.find({"name":"John"})などのMongoDBコマンドは、select data from emp e where e.data."name" = 'John'のようなSQL select文を使用してデータベースに対して実行されます。 - 必要に応じて、JSONコレクションでSQLを直接実行できます。このモデルを使用すると、NoSQLドキュメント・ストアの速度、柔軟性、使いやすさを把握でき、ネイティブに格納されているJSONデータに対して分析とレポートに直接SQLを使用できます。
- スタート・ガイド
- 要件
この項では、クライアントおよびデータベースの要件を示します。 - MongoDBの構成可能な設定
この項では、global/settings.xmlにあるグローバル構成に格納されている、MongoDB APIをサポートするための編集可能な構成設定を示します。 - 例
この項では、ords config setコマンドを使用してMongoDB設定を現在の作業ディレクトリ(CWD)global/settings.xmlに格納する例をいくつか示します。また、global/settings.xmlファイル内のMongoDBリスナー設定の例も示します。 - 接続プールへのアクセス
- MongoDB APIアクセスのロギング
この項では、MongoDB APIへのリクエストのロギングを有効にする方法について説明します。 - 高パフォーマンスの実現
この項では、高パフォーマンスの実現に役立つ設定について説明します。
9.1 スタート・ガイド
- ORDSをインストールおよび構成します:
コマンド・プロンプトから、次のコマンドを使用してORDSをインストールおよび構成します。
ノート:
- Autonomous Databaseに対してORDSをインストールする場合は、コマンド
ORDS install adbを使用します。 - Oracle API for MongoDBは、非CDBデータベース内かPDB内のインストールの場合のみサポートされています。
- ORDSを非CDBデータベースまたはPDBにスタンドアロン・モードでインストールします。
ノート:
Oracle API for MongoDBは、非CDBデータベース内かPDB内のインストールの場合のみサポートされています。ords install - デフォルトでは、Oracle API for MongoDBは有効になっていません。このAPIを有効にするには、構成に次の内容を含めます:
ords config set mongo.enabled true - ORDSを起動します
ords serve
MongoDB APIが有効になっている場合は、ORDSの起動時に通知が表示され、その接続文字列が取得されます。
MongoDBのためのOracle APIが有効になっていることを示すログ:ORDS serveコマンドを使用してORDSを起動すると、ログに次のようなメッセージが表示され、MongoDBのためのOracle APIが有効かどうかが確認されます。Disabling document root because the specified folder does not exist: ./config/global/doc_root 2022-08-17T15:23:04.043Z INFO Oracle API for MongoDB listening on port: 27017 2022-08-17T15:23:04.050Z INFO The Oracle API for MongoDB connection string is: mongodb://[{user}:{password}@]localhost:27017/{user}?authMechanism=PLAIN&authSource=$external&ssl=true&retryWrites=false&loadBalanced=true - Autonomous Databaseに対してORDSをインストールする場合は、コマンド
- ORDS対応ユーザーを作成します:
サーバーを実行したままにして、SQLclからORDS対応ユーザーを作成します。
関連項目:
ユーザー、認証および認可の作成create user foo identified by "<Password>"; grant soda_app, create session, create table, create view, create sequence, create procedure, create job, unlimited tablespace to foo; connect foo/<Password> exec ords.enable_schema; - MongoDBシェルを使用してORDSに接続します:
ORDSでは、デフォルトで、セキュアな通信のために自己署名証明書が使用されます。Mongo APIでは自己署名証明書は許可されていないため、MongoツールまたはドライバでMongo APIに直接接続することはできません。
代替方法を次に示します:- TLSオプションの無効化は、機密データを扱わないローカル環境のためにのみ用意されています。TLSを無効にするには、ORDSを起動する前に次のコマンドを呼び出す必要があります:
ords config set mongo.tls false ords serveノート:
Mongo API接続文字列が、mongo.tlsが有効になっていないことを反映するように変更されます。たとえば、...ssl=false...のようになります。 -
mongoツールとドライバを使用して、有効な署名付き証明書を必要とするTLSの要件を明示的に無効にします。
設定は、ツールやAPIによって異なります。たとえば、mongoshには--tlsAllowInvalidCertificatesコマンドライン引数がありますが、mongoimportには--tlsInsecureコマンドライン引数があります。 -
有効な署名付き証明書を取得するように、プロパティ
standalone.https.certおよびstandalone.https.cert.keyを構成します。
有効な署名付き証明書なしで
mongoshを使用する例:mongosh --tlsAllowInvalidCertificates 'mongodb://foo:<Password>@localhost:27017/foo?authMechanism=PLAIN&authSource=$external&tls= true&retryWrites=false&loadBalanced=true'foo> db.createCollection('emp'); { ok: 1 } foo> db.emp.insertOne({"name":"Blake","job": "Intern","salary":30000}); ... foo> db.emp.insertOne({"name":"Smith","job": "Programmer","salary": 60000,"email" : "smith@oracle.com"}); ... foo> db.emp.insertOne({"name":"Miller","job": "Programmer","salary": 70000}); ... foo> db.emp.find({"name":"Miller"}); [ { _id: ObjectId("6320bfc40dd73b60ef5641b9"), name: 'Miller', job: 'Programmer', salary: 70000 } ] foo> db.emp.updateOne({"name":"Miller"}, {$set: {"email":"miller@oracle.com"}}) { acknowledged: true, insertedId: null, matchedCount: 1, modifiedCount: 1, upsertedCount: 0 } - TLSオプションの無効化は、機密データを扱わないローカル環境のためにのみ用意されています。TLSを無効にするには、ORDSを起動する前に次のコマンドを呼び出す必要があります:
- MongoDBクライアントから挿入されたデータには、SQLからアクセスできます。
SQL> select json_serialize(e.data) from emp e; JSON_SERIALIZE(E.DATA) -------------------------------------------------------------------------------- {"_id":"6320bfa30dd73b60ef5641b7","name":"Blake","job":"Intern","salary":30000} {"_id":"6320bfb30dd73b60ef5641b8","name":"Smith","job":"Programmer","salary":60000,"email":"smith@oracle.com"} {"_id":"6320bfc40dd73b60ef5641b9","name":"Miller","job":"Programmer","salary":70000,"email":"miller@oracle.com"} SQL> select e.data."name".string() n, e.data."job".string() j from emp e where e.data."email".string() = 'miller@oracle.com'; N J -------------------- ----------------------- Miller Programmer
9.2 要件
この項では、クライアントおよびデータベースの要件をリストします。
MongoDB APIでは、Oracle Databaseバージョン21c以降およびAutonomous Oracle Database 19c以降(Serverless、DedicatedおよびCloud@Customer)がサポートされています。通常、MongoDBのためのOracle APIでは、loadBalanced接続オプションをサポートするMongoDBツールとドライバがサポートされています。
9.3 MongoDBの構成可能な設定
この項では、global/settings.xmlにあるグローバル構成に格納されているMongoDB APIをサポートするための編集可能な構成設定を示します。
ノート:
Oracle REST Data Servicesコマンドライン・インタフェースを使用して構成ファイルを編集することをお薦めします。表9-1 Mongo APIをサポートするための構成設定
| キー | 型 | 説明 |
|---|---|---|
mongo.enabled(必須プロパティ) |
ブール値 | MongoDBのためのAPIを有効にすることを指定します。デフォルト値はfalseです。
MongoDB用APIを有効にするには、値を |
mongo.tls |
ブール値 | 暗号化されたセキュアな通信のためにそのAPIでTLSを必要とするかどうかを指定します。デフォルト値はtrue。
|
mongo.access.log |
パス | MongoDBアクセス・ログのAPIを格納するフォルダへのパスを指定します。パスが指定されていない場合、アクセスは生成されません。 |
mongo.host |
文字列 | リスニングを行う特定のネットワーク・インタフェースを識別するためのホスト名またはIPアドレスのカンマ区切りのリストを指定します。デフォルトは0.0.0.0です。
|
mongo.port |
整数 | MongoDBのためのAPIリスニング・ポートを指定します。デフォルト値は27017です。
|
mongo.idle.timeout |
期間 | 接続の最大アイドル時間をミリ秒単位で指定します。デフォルト値は30mです |
mongo.op.timeout |
期間 | データベース操作の最大時間をミリ秒単位で指定します。デフォルト値は10mです。
|
9.4 例
この項では、ords config setコマンドを使用してMongoDB設定を現在の作業ディレクトリ(CWD) global/settings.xmlに格納する例をいくつか示します。また、global/settings.xmlファイルのMongoDBリスナー設定の例も示します。
ords config setコマンドの使用例
ords config set mongo.enabled trueords config set mongo.host example.comords config set mongo.port 27017ords config set mongo.idle.timeout 40mords config set mongo.op.timeout 15m
global/settings.xmlのMongoリスナー設定の例
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Saved on Wed Jun 15 01:33:58 UTC 2022</comment>
<entry key="debug.printDebugToScreen">true</entry>
. . .
<entry key="mongo.host">example.com</entry>
<entry key="mongo.idle.timeout">40m</entry>
<entry key="mongo.enabled">true</entry>
<entry key="mongo.op.timeout">15m</entry>
<entry key="mongo.port">27016</entry>
. . .
</properties>
ords config getコマンドの使用例
ords config get mongo.enabledtrueords config get mongo.port27016
ords serveコマンドの使用
ords serveコマンドを使用して、スタンドアロン・モードで実行します。
ノート:
MongoDBのためのOracle APIを有効にするには、serveコマンドを実行する前に、mongo.enabledプロパティをtrueに設定する必要があります
9.5 接続プールへのアクセス
Oracle REST Data Servicesでは、複数のデータベースに接続する機能がサポートされています。installコマンドを使用して、複数の名前付きプールを定義できます。プールを追加すると、ORDS構成ディレクトリ内の./databasesの下に、対応するディレクトリが作成されます。Oracle REST Data Servicesの初期インストールでは、通常、defaultという名前のデフォルトのデータベース接続プールが追加されます。
mydb1という名前のデータベース・プールの構成ディレクトリがords_config/databases/mydb1にあるとします。
ノート:
mongo.tlsキーが無効になっている場合、複数のプールは使用できません。デフォルト・プールのみがサポートされています。
次のように、2つのホスト名を含むホスト名ファイルords_config/databases/mydb1/hostnamesを作成する場合:
www.example.com
example.comdefault接続プールではなくmydb1接続プールにルーティングされます。"mongodb://www.example.com:27017/scott?authMechanism=PLAIN&authSource=$external&ssl=true&retryWrites=false&loadBalanced=true"
"mongodb://example.com:27017/scott?authMechanism=PLAIN&authSource=$external&ssl=true&retryWrites=false&loadBalanced=true"
9.6 MongoDB APIアクセスのロギング
この項では、MongoDB APIへのリクエストのロギングを有効にする方法について説明します。
デフォルトでは、MongoDB APIへのリクエストはログに記録されません。MongoDB APIへのロギング・アクセスを有効にするには、構成プロパティmongo.access.logをディレクトリ・パスに設定する必要があります。ディレクトリ・パスが絶対パスでない場合、ORDS構成ディレクトリ(<ords config>)に対して相対的に解決されます。ディレクトリが存在しない場合、ORDSは起動時にディレクトリを作成します。ORDSは、MongoDB APIにアクセスするたびに、このディレクトリ内にアクセス・ログ・ファイル・エントリを追加します。
例:
ords config set mongo.access.log mongologs
このコマンドは、<ords config>/mongologs/フォルダ下のアクセス・ログ・ファイルに書き込みます。
9.7 高パフォーマンスの実現
この項では、高パフォーマンスの実現に役立つ設定について説明します。
より高いパフォーマンスまたはスループットが必要な環境では、一部のORDS接続プール・パラメータを構成およびチューニングする必要があります。
スループットを向上させるには、次の設定と値が役立ちます。これらのパラメータの最適なチューニングは、アプリケーションの要件によって異なります。
ords config set jdbc.MaxConnectionReuseCount 5000
ords config set jdbc.MaxConnectionReuseTime 900
ords config set jdbc.SecondsToTrustIdleConnection 1
ords config set jdbc.InitialLimit 100
ords config set jdbc.MaxLimit 100
説明:
MaxConnectionReuseTime: 接続が特定の回数流用された後に、接続を適切に閉じて接続プールから削除できるようにします。SecondsToTrustIdleConnection: 最近使用したか、最近テストしたデータベース接続を信頼するための秒数を設定し、接続チェックアウト中の検証テストをスキップします。InitialLimitおよびMaxLimits: 指定した接続プールの接続プール・サイズをUCPで設定します。
