問合せコーディネータ操作

シャード・カタログのSQLコンパイラは、関連するシャードを自動的に識別し、関係するすべてのシャード間で問合せの処理を調整します。コーディネータとシャードの間の通信のために、データベース・リンクが使用されます。

次の図に示すように、おおまかに言うと、コーディネータは各受信問合せQをコーディネータ問合せ(CQ)とシャード問合せ(SQ)の2つの問合せにリライトします。SQ (シャード問合せ)は各参加シャードで実行されるキューの一部、CQ (コーディネータ問合せ)はコーディネータ・シャードで実行されるキューの一部です。

問合せQはCQ (Shard_Iterator (SQ))にリライトされます。ここで、Shard_Iteratorはシャードに接続してSQを実行する演算子です。パラレルまたはシリアルで実行できます。

図8-3問合せコーディネータ操作



次の例では、集計問合せQ1をQ1'にリライトしています。

Q1 : SELECT COUNT(*) FROM customers

Q1’: SELECT SUM(sc) FROM (Shard_Iterator(SELECT COUNT(*) sc FROM s1 (i) ))

この処理には2つの主要な要素があります。

  1. 関連するシャードが識別されます。

  2. 問合せが分散形式にリライトされ、関連するシャードで繰り返されます。

コーディネータ・データベースでの問合せのコンパイル中に、問合せコンパイラはシャーディング・キーに対する述語を分析し、関与するシャード(つまり、問合せで参照されるシャード表の行があるシャード)を識別するために使用できる述語を抽出します。残りのシャードは除外されたシャードと呼ばれます。

関与するシャードが1つのみ識別された場合は、問合せ全体がそのシャードにルーティングされて処理されます。これは単一シャード問合せと呼ばれます。

関与する複数のシャードがある場合、その問合せはマルチシャード問合せと呼ばれ、リライトされます。リライト処理では、問合せによって計算される式および問合せの形態が考慮されます。