2012-03-28 16 views
3

私は非常に複雑なクエリを実行しているインデックスを持っています。主な減速は、各レコードについて2-5語を含むフィールドに対して実行されるファジィ照会である。私は主に1-3の異なる文字列を見つけなければなりません。巨大なサーバ/サーバクラスタのための弾性サーチファジーマッチング最適化

私の4コア(HT搭載)と8GB RAMマシンでは、私のクエリはそれぞれ約1〜2秒で実行されます。 12コア(HT)と72Gb RAMのサーバーでは、クエリは0.3〜0.5秒で実行されます。これは、ハードウェアの合理的な拡張として私には思われません。私は、クエリのパフォーマンスを調整するために調整するための隠されたオプションがいくつかあるはずです。

私は弾力的な検索ガイドを見てきましたが、CPUやRAMの数に基づいてパフォーマンスをチューニングしたり、ファジークエリ専用に弾力性をチューニングするのに役立つものは見つかりませんでした。

別の質問は、このような別のサーバーを追加するとどのように拡大しますか?クエリ時間は約2倍になりますか?

答えて

2

ここにはいくつかの可能性があります。まず、クエリがI/Oバウンドであることです。この場合、2つのノードが2つのディスクからデータを取得するため、別のサーバーを追加するだけで役立ちます。もう1つの可能性は、クエリがCPUに束縛されていることです。単一の断片に対する検索は、単一スレッドのプロセスです。インデックスがデフォルト設定で作成されたと仮定すると、5つのシャードがあります。したがって、5つ以上のCPUでクエリを実行すると、大きなメリットはありません。この場合、別のノードを追加すると、ネットワークのオーバーヘッドが原因で処理が遅くなります。代わりに、より多くの断片を含む索引を再作成する必要があります。

+0

私は3つのサーバーがそれぞれ12コア(24バーチャル)の場合、私にとって最適なシャード数は(3 * 12)* 1.5 = 54のようなものですか?レプリカを使用して同じパフォーマンスの向上を達成できますか? btw私は冗長性のために少なくとも1のレプリカ値を使用します。 –

+0

システム上で1つのクエリを実行すると、ほとんどの作業が5つのスレッド(各シャードごとに1つのスレッド)に分割されます。 2番目のクエリを開始すると、別の5つのスレッドが使用されます。つまり、一度に1つのクエリを実行するとレプリカは役立ちませんが、多数の同時クエリを実行すると役立ちます。しかし、ボトルネックはデータとトラフィックのパターンに応じてシステムの一部から別の部分に簡単に移行できるため、これを理論的な課題として近づけないように注意します。実際のデータの実際のトラフィックをシミュレートし、システムのパフォーマンスを測定してボトルネックを特定することを試みるべきです。 – imotov

+0

大丈夫、ありがとう) –

関連する問題