データベース・リクエストのシャードへのルーティング方法
Oracle Globally Distributed Databaseでは、シャーディング・キーがリクエストに指定されているかどうかに応じて、データベース問合せおよびDMLリクエストは2つの主な方法でシャードにルーティングされます。
この2つのルーティング方法は、直接ルーティングおよびプロキシ・ルーティングと呼ばれます。
直接ルーティング
データベース・リクエストでシャーディング・キーを指定することで、シャードに直接接続して問合せおよびDMLを処理できます。直接ルーティングは、パフォーマンスを向上させるためにシャードにアクセスする場合に推奨される方法で、特に利点があります。
プロキシ・ルーティング
アプリケーションでは、複数のシャードからのデータを必要とする問合せや、シャーディング・キーを指定していない問合せを直接ルーティングできません。こうした問合せには、アプリケーションとシャードの間でリクエストをルーティングするためのプロキシが必要になります。プロキシ・ルーティングは、シャード・カタログ問合せコーディネータによって処理されます。
問合せおよびDMLのシャードへの直接ルーティング
シャーディング・キーを提供する場合、アプリケーションはリクエストをシャードに直接ルーティングできます。直接ルーティング・メカニズムでは、リクエストはルーティングされたシャードに属するデータの問合せおよび操作のみが可能です。
シャード上のデータへの直接アクセスには、いくつかの利点があります。
-
パフォーマンスの向上: 全体的に、アプリケーションでは、シャード・カタログを介してリクエストをシャードに間接的にルーティングするよりもパフォーマンスが向上します(プロキシによる)。直接ルーティングでは、リクエストおよび結果がコーディネータ・データベースを通過する必要はありません。
- シャードの地理的分散に対応します。アプリケーションは、リージョン内でローカライズされたシャード内のデータにアクセスできます。
- ロード・バランシングが容易: チャンク移動を使用してシャード間でデータを移動することで、シャード間でのアプリケーション・リクエストのロード・バランシングを簡単に実行できます。
- すべてのタイプの問合せをサポートします。
-
シャード表に対する
SELECT
、INSERT
およびUPDATE
: これらのリクエストの有効範囲は、アクセスされるシャードに属するデータです。 - 重複表に対する
SELECT
、INSERT
およびUPDATE
: これらのリクエストの有効範囲は、重複表内のすべてのデータです。重複表のプライマリ・コピーはコーディネータ・データベースに存在するため、重複表のDMLはコーディネータ・データベースに再ルーティングされます。
-
シャード表に対する
次の図は、シャードへの直接ルーティングを使用した重複表に対するDMLを示しています。
- アプリケーションは、シャードの1つ(シャードDB1)にDMLリクエストを直接送信します。
- DMLは、シャードDB1からコーディネータ・データベースに転送され、プライマリ重複表で実行されます。
- コーディネータ・データベースのリフレッシュ・メカニズムが定期的に実行され、すべてのシャードで重複表のインスタンスが更新されます。
直接ルーティングの詳細は、クライアント・アプリケーション・リクエストのルーティングを参照してください。
直接ルーティング用アプリケーションの開発の詳細は、Oracle Globally Distributed Databaseのアプリケーションの開発を参照
プロキシによる問合せおよびDMLのルーティング
シャード・カタログ問合せコーディネータをプロキシとして使用すると、Oracle Globally Distributed Databaseでは、シャーディング・キーを指定しない問合せおよびDMLのリクエスト・ルーティングを処理できます。
コーディネータをプロキシとして使用することで、Oracle Globally Distributed Databaseでは、問合せを処理するシャードを指定しなくても、任意のデータベース・アプリケーションがSQL文を実行できる柔軟性が提供されます。問合せコーディネータでは、複数のシャードでクロスシャード更新、挿入および削除をパラレルで実行します。
コーディネータの詳細は、問合せ処理と問合せコーディネータを参照してください。
次の図は、プロキシ・ルーティングを使用した重複表に対するDMLを示しています。
- DMLリクエストがアプリケーションからコーディネータ・データベースに送信され、プライマリ重複表で実行されます。
- コーディネータ・データベースのリフレッシュ・メカニズムが定期的に実行され、すべてのシャードで重複表のインスタンスが更新されます。
この章の残りのトピックでは、プロキシによるデータベース・リクエストのルーティングおよび処理について説明します。