0

現在、DBMS の並列処理に関する本を読んでいますが、結合操作で並列処理がどのように機能するかを正確に理解するのは難しいと感じています。

10 個のシステムがあり、各システムにはそれぞれ独自のディスク領域とメイン メモリがあるとします。たとえばデータを共有するために、システムが相互に通信できるネットワークがあります。

ここで、次の操作があるとします: A(X,Y) JOIN B(Y,Z)

テーブル A と B は大きすぎるため、全体的な計算速度を向上させるために並列処理を使用したいと考えています。

A および B テーブルの各レコードの「Y」属性にハッシュ関数を適用し、これらのレコードを別のシステムに送信します。各システムは、取得したレコードを結合するために、ローカル アルゴリズムを使用できます。

私が理解していないのは、最初のハッシュ関数が正確にどこに適用され、最初のテーブル A と B が正確にどこに格納されているのかということです。

私が読んでいる間、別の「メイン」システムがあり、それにも独自のディスクスペースがあり、このスペースにすべての初期情報、つまりすべてのレコードを含むテーブル A と B があると思いました。このシステムは、最初のハッシュ関数を適用するために独自のメイン メモリを使用しました。これにより、合計 10 個のレコードからシステムが最終的に移動して処理される場所が決定されました。

ただし、読んだときに、次の例で行き詰まりました(ギリシャ語から翻訳しました)

R(X,Y) JOIN S(Y,Z) という 2 つのテーブルがあり、R には 1000 ページ、S には 500 ページがあるとします。並列に使用できるシステムが 10 個あるとします。そのため、ハッシュ関数を使用して、各レコードの送信先を決定することから始めます。テーブル R および S を読み取るために必要な I/O の合計量は 1500 で、これはシステムごとに 150 です。各システムには、残りの各システムに必要な 15 ページのデータがあるため、135 ページを他の 9 つのシステムに送信します。したがって、通信の合計は 1350 ページです。

太字の部分がよくわかりません。システムが他のシステムにデータを送信する必要があるのはなぜですか? 前に話した「メイン」システムはこの仕事をしていませんか?

私は次のようなものを想像します:

               main_system
                  ||
                  \/
            apply_hash(record)
                  ||
                  \/
              send record to the appropriate system
              / /  /  /  /  /  /  /  /  /  
            s1 s2 s3 s4 s5 s6 s7 s8 s9 s10

現在、すべてのシステムに独自のレコードがあり、ローカルアルゴリズムを適用して結果を出力します。システム間の通信がありません。ここで何が欠けていますか?? この本は別のアプローチを使用していますか? もしそうなら、同じユニットを3回読んでもまだ理解できないので、どのようなアプローチを使用していますか?

前もって感謝します

4

2 に答える 2

0

idは、接続がローカルクライアントであると大げさに推測します。すべてのマシンに接続しているためです。

于 2012-09-13T00:29:03.427 に答える
0

シェアード ナッシング システムでは、通常、データの作成時にプロセッサ間でデータが分割されます。データベースは何も共有できませんが、おそらく最良のドキュメントは、Hadoop と HDFS (Hadoop 分散ファイル システム) に関するものです。

関数は行をパーティションに割り当てます。いくつかの例を以下に示します。ラウンド ロビン。新しい行が次々にプロセッサに割り当てられます。範囲ベース。列の値に基づいて行がプロセッサに割り当てられます。ハッシュベース。値のハッシュに基づいて行がプロセッサに割り当てられます。データを分割するプロセスは、SQL Server や Oracle などの非共有環境にないデータベースでの「分割」と非常によく似ています。

結合が両方のテーブルのパーティション キーを使用し、パーティション分割方法が同じである場合、データは既にローカルです。それ以外の場合、処理を続行するには、1 つまたは両方のテーブルを再配分する必要があります。

あなたが引用したセクションでは、おそらく算術に混乱しているでしょう。10 個のプロセッサーに 1500 ページある場合、それぞれ平均 150 ページになることに注意してください。これらのページは再配布する必要があります。あなたがプロセッサ 3 だとします。約 15 ページがプロセッサ 1 に送られます。別の 15 をプロセッサ 2 に、もう 1 つをプロセッサ 3 に。これらを送信する必要はありません。彼らはすでに正しい場所にいます。9*15 = 135 ページを他のプロセッサに送信するだけで済みます。

重要なアイデアは、共有されない環境で、同じプロセッサが処理を行っているときにデータを保存しているということです。

于 2012-09-13T00:44:17.240 に答える