1

私たちは Heroku で実行されている Ruby on Rails アプリであり、DB には Heroku の Postgres ソリューションを使用しています。

非常に高価な DB クエリがあります。約45秒かかります。memcache を使用してこのクエリをキャッシュします...しかし、キャッシュ内で 24 時間後にこのクエリを実行するページに誰かが初めてアクセスすると、このクエリが実行されているため、基本的にサイトはダウンします。

クエリをバックグラウンド スレッドに配置することを検討しています。それは memcache でうまく機能し、サイトのパフォーマンスに役立ちますか? DB がまだ大きなクエリを処理しているという事実は、他のページの読み込みに影響しますか?

4

1 に答える 1

1

問題が dyno でリソースを集中的に使用したり、データベースをロックしたりしない場合に役立つ場合があります。

どちらのケースにも当てはまらない場合は、単純に何か (以前のバージョン、キャッシュが古くなる前にプロセスを開始する) を開始クライアントに返して、新しいスレッドをスピンすることができます。

強度がデータベースではなく dyno にある場合は、worker dyno またはスケジュールされたジョブをスピンアップしてみてください。

データベースがロックされている場合は、設計図に戻っています。

ああ、アプリケーションが 1 つのデータベース接続しか使用しない場合は、スレッド用に別の接続を必ず開いてください (dyno が自動的に処理します)。

于 2013-03-13T14:41:02.547 に答える