関連する 2 つのモデルがあるとします。
class Foo(models.Model):
value = models.FloatField()
class Bar(models.Model):
multiplier = models.FloatField()
foo = models.ForeignKey(Foo, related_name="bars")
def multiply(self):
return self.foo.value * self.multiplier
Foo のインスタンスには多くの Bar のインスタンスが含まれることがよくありますが、Bar が行う計算に関連する一部の情報は Foo に格納されます (関連する Bar のすべてのインスタンスで同じであるため)。
問題は、私がこのようなことをするときです:
foo = Foo.objects.latest()
[x.multiply() for x in foo.bars.all()]
foo.bars.all() 内のすべての Bar オブジェクトがデータベースに Foo オブジェクトを照会するため、最終的にデータベースに頻繁にヒットします。したがって、10 個のバーがある場合、11 個のデータベース クエリが発生します (10 個のバーを含むクエリセットを取得するために 1 回、self.foo.value を取得するために戻ってくる各 Bar オブジェクトに対して 1 回)。select_related() を使用しても役に立たないようです。
私の質問は次のとおりです。1) memcached (Johnny Cache、Cache Machine など) がこの問題を解決すると考えるのは正しいですか? 2) キャッシュなしでコマンドをより効率的にすることができるオブジェクト関係を設計する方法はありますか?