1

私はユーザーがパラメーターを提供するWebアプリケーションに取り組んでおり、これらは最大2,000万行のデータベースから上位1000項目のリストを作成するために使用されます。一度に上位1000のアイテムすべてが必要であり、ユーザーの観点から、このランキングが多かれ少なかれ瞬時に発生する必要があります。

現在、ユーザー定義関数を備えたMySQLを使用してデータのスコアリングとランク付けを行っており、PHPはそこからデータを取得します。1M行のデータベースでテストすると、これには約8秒かかりますが、最大2,000万行のデータベースの場合でも、約2秒のパフォーマンスが必要です。最大50人の同時ユーザーに対して適切なスループットが保証されるように、この数はさらに低くすることが望ましいです。

MySQLであるかどうかに関係なく、このデータを可能な限り効率的に処理できるソフトウェアを使用して、あらゆるプロセスを受け入れることができます。プロセスの機能と制約は次のとおりです。

  • スコアリングプロセスに関連する各行のデータは、アイテムあたり約50バイトです。
  • DBへの挿入と更新はごくわずかです。
  • 各スコアは他のスコアから独立しているため、スコアを並行して計算できます。
  • パラメータとパラメータ値の数が多いため、スコアを事前に計算することはできません。
  • この方法は、複数の同時ユーザーに対して適切に拡張できる必要があります
  • サーバーの数の観点から、これに必要なコンピューティングリソースは少ないほど良いです。

ありがとう

4

4 に答える 4

1

実行可能なアプローチは、すべてのデータを約 1 GB の RAM にロード (および後で更新) し、C++ のような言語で MySQL の外部でスコアリングとランキングを実行することです。これは、MySQL よりも高速である必要があります。

このアプローチでは、スコアリングは比較的単純でなければなりません。これは、並列化や最適化を行わずに、スコアリングとランク付けのために 1 行あたり 10 分の 1 マイクロ秒しか残さないためです。

于 2011-07-07T17:21:52.423 に答える
0

基準に基づいて、パフォーマンスを向上させる可能性は、入力基準を使用して、スコアを計算する必要がある行数を事前にフィルター処理できるかどうかによって異なります。つまり、ユーザー指定のパラメーターの1つが行の大部分を自動的に失格にする場合、そのフィルタリングを最初に適用するとパフォーマンスが向上します。どのパラメータにもその特性がない場合は、はるかに多くのハードウェアまたはより高いパフォーマンスのデータベースが必要になる可能性があります。

于 2011-07-07T20:20:33.420 に答える
0

問題が発生しているクエリを投稿できれば、助けになる可能性があります。

ここにいくつかのことがありますが。データベースにインデックスが作成されていることを確認してください。最適化されたクエリを使用し、内部クエリの代わりに結合を使用してください。

于 2011-07-07T17:25:32.137 に答える
-1

この種の問題については、明らかなソフトウェアの最適化をすべて行った場合(ソフトウェアのアプローチについて何も言及していないため、それを知ることはできません)、深刻なハードウェアの最適化を試みる必要があります。 . SQL サーバーのメモリを最大限に活用し、可能な場合はテーブルをメモリに収めるようにしてください。テーブル/インデックス ストレージに SSD を使用して、高速なデシリアライズを行います。クラスター化されている場合は、ネットワークを実現可能な最高のネットワーク速度に上げます。

于 2011-07-07T17:26:00.133 に答える