1

約12列のMySQLデータベースと、1文字のコードでコード化された数百万のレコードを使用するWebアプリがあります。断面は、WHERE句を追加することで照会できます。

SELECT col1, COUNT(col1) AS num FROM my_table WHERE col2='U' GROUP BY col1

各ページは、この種のクエリを約12回実行します。各列に1つずつ、WHERE句に示されているクエリを差し引いたものです。

私はキャッシュシステムを持っていますが、データは毎日更新され(数十万のレコードが追加され)、最初にキャッシュを生成するプロセスは非常に遅くなります。私はまだNoSQLのアイデアに頭を悩ませようとしていますが、それにはさまざまなパラダイムがあるようです。各レコードがJOINsのない同じ形式に従っているとすると、これはNoSQLデータベースに移行するのに適切な状況でしょうか?もしそうなら、どれ(またはどの種類)をお勧めしますか?

編集:PHP互換である必要があることを追加する必要があります。

4

1 に答える 1

0

これは良い質問です。

私の経験では、何百万もの行を処理するのは常に注意が必要です

これを達成する最善の方法は、この種のクエリで動作するように構築された特定のデータベースを使用することだと思います。

デフォルトでは、MySQL は行指向であり、トランザクション データベース (OLTP) として機能するように設計されています。つまり、行の小さなセットをすばやく挿入、更新、削除できます。ただし、この種のクエリを使用して大規模なデータセットを操作するようには設計されていません。そのため、数百万行を超える値をカウントするには時間がかかるか、結果が得られない場合があります (メモリ オーバーフロー...)

クエリは典型的な分析クエリです (列に対する集計と GROUP BY が含まれています)。列指向データベースの使用を検討する必要があります。これらのデータベースは、大規模なデータセットを処理するように最適化および設計されています。(列指向データベース)

大規模なデータセットを処理するために NoSQL データベースを使用したことはありません。スキーマを明確に定義する必要が常にあり、列指向のデータベースで十分だったからです。それらのいずれかを使用する場合は、実行したいクエリ (集計タイプ SUM、COUNT、...) がサポートされていることを確認してください。また、毎日新しい行を挿入する方法にも注意してください。

于 2012-10-24T19:35:23.820 に答える