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を使用できます。
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 true
ords config set mongo.host example.com
ords config set mongo.port 27017
ords config set mongo.idle.timeout 40m
ords 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.enabled
true
ords config get mongo.port
27016
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.com
default
接続プールではなく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で設定します。