0

検索エンジンからの新しい訪問ごとに、訪問者が検索エンジンで検索したキーワード(「phpパフォーマンス」など)を保存します。

キーワードが1日に使用される頻度を数えるには、他の誰かがその特定の日にその用語をすでに検索しているかどうかを確認する必要があります。

数か月後、テーブルは非常に大きくなり、その日のmysqlによるキーワードの存在のチェックにはますます時間がかかります。そこで、キーワードのみを保存し、各キーワードに特定のIDを指定して、チェックプロセスを1回だけ行い、新しい日は行わないという追加のテーブルに切り替えました。私が毎日多様化して表に挿入するキーワードに関連したこの特定のID。

これはすでにうまく機能していますが、このテーブルもどんどん大きくなっています...

誰かがこれをより高いパフォーマンスにするための良い解決策を持っていますか?

一番、

フレディ

4

3 に答える 3

1

パフォーマンスに関しては、改善するためにできるいくつかの「トリック」があります。

  1. キャッシュメカニズムを構築します。これは、2番目のテーブルを作成することによってすでに行ったことです。これをさらに進めて、キャッシュされたテーブルをメモリまたはmemcachedに保持することができます。
  2. クエリを最適化し、検索フィールドにインデックスがあることを確認します。あなたがそれをしたなら、shureしないでください。
  3. データベースを(非)正規化してみてください。別のデータベース構造は、設計の観点からは最適ではなく、速度が最適化されている場合があります。あなたがそれをしたかどうかわからない。
  4. 検索のためのさまざまなソリューションを見てください。おそらくLuceneを見てください。
于 2012-09-18T10:27:20.343 に答える
0

ユーザーが入力したすべてのキーワードをDBに保存しないでください。次の列を持つテーブルを作成します:keyword、counter

訪問者がキーワードを入力するたびに、DBでキーワードを検索し、カウンターを増やします。キーワードが存在しない場合は、counter=1で新しいキーワードを作成します。

また、キーワード列にインデックスを使用し、全文検索を使用せず、直接比較を使用します。

SELECT counter FROM keyword_table WHERE keyword="exact keyword" LIMIT 1;
于 2012-09-18T10:27:11.320 に答える
0

私は個人的にこのデータのプライマリバッキングストアとしてMySQLを使用しません。おそらく、バックアップストアとしてMySQLを使用して、はるかに高速で可用性の高いNoSQLソリューションを検討します...

APCにはmutexロックが組み込まれており、番号が破損することはないと思います。apcを起動して実行し、その数に満足できない場合は、Mutexに直接アクセスして、サービングプロセスが書き込みを行わないようにする必要があります。別のプロジェクトと同時に、Mutexはhttps://github.com/krakjoe/pthreadsにある私のpthreadsプロジェクトで提供されています。さらにサポートが必要な場合は、お気軽にお問い合わせください...

于 2012-09-20T16:50:51.150 に答える