私のコードは、かなりおしゃべりな方法で、多くの DB クエリを作成することがあります。
// Process all users:
for (User u : users) {
// multiple queries per single user
w = Website.find("owner = ?", u.id);
d = Demo.find("...");
...
}
上記のコードは特別な管理ページからのみ呼び出されるため、超高速である必要はありませんが、妥当なパフォーマンスを実現したいと考えています。完全に書き直さずにこれを行う一般的な方法はありますか?
私が想像しているのは、次のようなものを可能にする Play モジュールです。
// Preprocess - warm cache
Website.findAll();
Demo.findAll();
// After the above code was run, all the data is cached in the scope of this request, so
// the following code should now not do any fetches to the database
// Process all users:
for (User u : users) {
// multiple queries per single user
w = Website.find("owner = ?", u.id);
d = Demo.find("...");
...
}
このような最適化レイヤーを構築しようとするのは正しいですか? どのようにアプローチしますか?
私が見ている利点は、これにより、プロトタイピング段階で「ばかげたコードを書く」ことができ、必要なときに適切なレベルに簡単に最適化できることです。もちろん、最適なパフォーマンスには達せず、非常に大きなテーブルでは機能しませんが、特定のタスクでは有益な場合があります。
それとも...「魔法の」キャッシュレイヤーに頼らずに、それを飲み込んで、代わりにコードを最初から書き直す必要がありますか?