0

私のアプリには 2 つのモデルがあります - リクエストとカテゴリ リクエストはカテゴリに属します。システムには多くのリクエストが含まれていますが、カテゴリはわずかです。カテゴリは静的で変更されることはなく、静的な他の関連付けも保持します。memcache を使用して、カテゴリと関連する関連付けを保存できます。

関連するカテゴリを DB ではなく memcache からロードする特定の Request をロードするときにレールに通知するにはどうすればよいですか?

req = Request.find(id)
req.category (Curr this hits the DB - want it to hit memcache)

メソッド req.category をオーバーライドすることが唯一の方法ですか?

4

2 に答える 2

0

よくわかりませんが、あなたの解決策はあなたが思っているほど良くないと思います。

つまり、20 個のカテゴリがあり、取得したい 2000 個のリクエストがあるとします。ActiveRecord で行う場合は、2 つのクエリでこれを行うことができます

Request.includes(:category)

これは DB の 2 倍しかヒットせず、適切なインデックスを作成すればかなり高速になるはずです。上記の数値を sqlite でテストしたところ、13.4 ミリ秒でかなり許容できる値が得られました。外部キーにインデックスがあるため、理由はわかりませんが、11.3ms まで低下しました。

memcached を使用して「ソリューション」を実装する場合、私は推測していますが、実際にはさらに悪化する可能性があります。リクエストをフェッチする回数だけキャッシュをヒットするためです。この例では、memcached を 2000 回ヒットします。それぞれ 1 ミリ秒かかる場合、2000 ミリ秒 = 2 秒になります。

于 2012-07-28T07:54:01.310 に答える
0

Memcache はキー/バリュー ストアであり、文字列のみを格納できるため、カスタム メソッドを記述してカテゴリを取得し、オブジェクトを何らかの方法でシリアル化する必要があります。

ここを見てください: ActiveRecord オブジェクトを memcached に保存する最良の方法は何ですか?

于 2012-07-28T05:34:03.173 に答える