Heroku を使用する ruby on rails アプリがあります。DBに負荷がかかるため、システム全体をロックするdbでインポート/エクスポートタスクなどを実行する必要があります。データベースがその瞬間に使用されていないときにのみこれらのタスクを実行するようにシステムに指示する方法はありますか?
2 に答える
このようなジョブをスケジュールする組み込みの方法はありません。ただし、できることがいくつかあります。
1 日の中で最も混雑していない時間帯にジョブを実行するようにスケジュールします。それはあなたのビジネス、顧客ベースなどによって異なりますが、他のウィンドウよりも適切なウィンドウがあることを願っています.
小さな単位の作業を行うバッチ ジョブを作成して、長時間実行することができます。各作業単位の間に、数秒間スリープするか、現在の負荷平均を見て、それに基づいて何をすべきかを決定します。これにより、バッチ ジョブの影響が軽減されます。
データベースまたはmemcachedなどのどこかで、Webサイトに「ロック」を更新させます。通常の Web サイトの使用によってデータベースが更新される場合は、既存の
updated_at
. 次に、しばらくアクティビティがなかったときにのみバッチ作業を行います。もちろん、これは、バッチ ジョブの実行と同時に新しいユーザーが表示されないことを保証するものではありませんが、サイトがあまり使用されていないウィンドウを見つける方法になる可能性があります。
Heroku でのバックグラウンド ジョブ/ワーカーの使用を検討しましたか? Heroku の遅延ジョブ キューイング システムについても読む価値があります。