0

Railsアプリでタコを使用して、読み取りクエリをスレーブボックスに直接転送し、マスターに書き込みます。これは素晴らしい逸品と言わざるを得ませんが、スレーブへのクエリは Active Record のデフォルトの SQL キャッシュを無視することに気付きました。DBサーバーを水平方向にスケーリングするという目的を無効にするだけで、スケーリングに役立つキャッシングレイヤーを失います。

誰かがこれを修正する方法についてアイデアを持っていますか、または使用するより良い宝石があります. タコが提供するシャーディング機能は必要ありません。単なる複製。

ありがとうございます

4

1 に答える 1

0

接続に対して SQL キャッシングをオンにする方法は、次のようにすることです。

ActiveRecord::Base.connection.cache do
    # the query cache is used here
end
# and turned off by here

メインのアクティブレコード接続レールには、リクエストごとにこれを設定するラック ミドルウェアがあります。スレーブ接続でこれを実現したい場合は、同様のことを行って、2 番目の接続のキャッシュを有効にする必要があります (ラック ミドルウェアが .xml になるよりも少し簡単ですaround_filter) 。

私は octopus にあまり詳しくありませんが、これら 2 つの接続は独立している可能性が高いようです。アクティブレコードは、他の接続でいくつかの書き込みを行ったという理由だけで、読み取り接続でキャッシュを無効にすることを認識しません。

于 2012-06-26T07:38:32.387 に答える