質問: Webと言うよりはデータの分割とうに関する質問です。 データを複数のマシン間で分割することを考えます。 私の読んでいる本に次のような記述があります。 「ハッシュ値が一致するコンピュータにデータを保持していく方法があります。 具体的には次のようにします。 データに関するキーをいくつか選び、ハッシュ値を生成し、ハッシュ値をマシンの台数で割ったあまりを計算し、その値に対応したマシンにデータを保持する。つまりデータは#[mod(hash(key), N)]というマシンに保持されることになります。 この方法の利点はルックアップテーブルが必要ないことです。どのマシンも、データのグループがどのマシンに保持されるかを自分で求めることができるからです。しかし、問題は一つのマシンのデータ量が増えてしまい、最終的には許容量を超えてしまう可能性があるということです。この場合はより良い負荷分散のためにデータを他のマシンに振り分けるか、マシンを木構造のような構成にしてデータを分割する必要があります。」 ハッシュ値の生成に偏りが生じるというわけですが、確率的に考えて不自然に思えます。 ハッシュ値を使うと、そのような偏りは生じないと思うのですが、生じてしまうのでしょうか? 回答お願いします。
回答: 例えば、無作為に抽出した自然数を特定の数で割ることを考えると... 偏りますよね。 むしろ偏る方が多い。 問題は、その偏り方の度合いがどうかって話ですな。 システム設計では想定外の要因で、 データに偏りが出るって話もあるでしょう。 それをきらうのであれば、相応のコストを払う必要がある ってことで、それも費用対効果でバランスをとる って話になってくるのではないかと。