問合せコーディネータ操作
シャード・カタログのSQLコンパイラは、関連するシャードを自動的に識別し、関係するすべてのシャード間で問合せの処理を調整します。コーディネータとシャードの間の通信のために、データベース・リンクが使用されます。
次の図に示すように、おおまかに言うと、コーディネータは各受信問合せQをコーディネータ問合せ(CQ)とシャード問合せ(SQ)の2つの問合せにリライトします。SQ (シャード問合せ)は各参加シャードで実行されるキューの一部、CQ (コーディネータ問合せ)はコーディネータ・シャードで実行されるキューの一部です。
問合せQはCQ (Shard_Iterator (SQ))にリライトされます。ここで、Shard_Iteratorはシャードに接続してSQを実行する演算子です。パラレルまたはシリアルで実行できます。
次の例では、集計問合せQ1をQ1'にリライトしています。
Q1 : SELECT COUNT(*) FROM customers
Q1’: SELECT SUM(sc) FROM (Shard_Iterator(SELECT COUNT(*) sc FROM s1 (i) ))
この処理には2つの主要な要素があります。
-
関連するシャードが識別されます。
-
問合せが分散形式にリライトされ、関連するシャードで繰り返されます。
コーディネータ・データベースでの問合せのコンパイル中に、問合せコンパイラはシャーディング・キーに対する述語を分析し、関与するシャード(つまり、問合せで参照されるシャード表の行があるシャード)を識別するために使用できる述語を抽出します。残りのシャードは除外されたシャードと呼ばれます。
関与するシャードが1つのみ識別された場合は、問合せ全体がそのシャードにルーティングされて処理されます。これは単一シャード問合せと呼ばれます。
関与する複数のシャードがある場合、その問合せはマルチシャード問合せと呼ばれ、リライトされます。リライト処理では、問合せによって計算される式および問合せの形態が考慮されます。