Objectify で Google App Engine を使用しており、データベース内のいくつかのエントリを 5 分ごとに削除したいと考えています。これを達成するための最良の方法は何ですか?Google App Engine の ThreadManager または cron ジョブを使用する必要がありますか? それとも別の方法がありますか?
2 に答える
Cronはここでの要件に合っているように思えますが、削除する必要があるエンティティの規模が心配です。(コメントによると、5分ごとに最大数十万)。その多くのエンティティを削除するにはかなりの時間がかかり、ほとんどの場合 5 分以上かかる可能性があり、フロントエンド cron ハンドラーの期限である 10 分以上かかることさえあります。
考えられる解決策の 1 つは、バックエンド インスタンスから削除することです。これは、バックエンドが期限なしで実行される可能性があるためです。Cron を使用して、削除対象のエンティティを照会し、キーのみのクエリを使用してそれらのキーを取得し、複数のバックグラウンド スレッドでエンティティを削除するプロセスを起動できます。
プロセスは無期限に実行される可能性があるため、スレッドが削除の完了を報告した後、すぐに再度クエリを実行して次のエンティティ セットを削除できます。バックエンドでグローバルなメモリ内ロックを使用して、後続の cron リクエストが別のプロセスを起動しないようにすることができますが、プロセスが既に実行されていることが検出された場合は黙って終了します。したがって、ここで cron は、削除プロセスのキープアライブ シグナルとしてのみ使用されます。
補足として、これほど頻繁に、この規模でエンティティのクエリと削除を行うと、データストアの運用コストの点で非常に高くつく可能性があることに注意してください。