オプションの memcached キャッシングを既存のデータベース クエリに簡単にラップできます。例えば:
古い (DB のみ):
function getX
x = get from db
return x
end
新規 (memcache を使用する DB):
function getX
x = get from memcache
if found
return x
endif
x = get from db
set x in memcache
return x
end
ただし、それは常にキャッシュしたい方法とは限りません。たとえば、次の 2 つのクエリを考えてみましょう。
-- get all items (recordset)
SELECT * FROM items;
-- get one item (record)
SELECT * FROM items WHERE pkid = 42;
上記の疑似コードを使用してキャッシュを処理すると、アイテム 42 のすべてのフィールドを 2 回格納することになります。ビッグレコードセットに1回、単独で1回。私はむしろこのようなことをしたいのですが:
SELECT pkid FROM items;
PK のそのインデックスをキャッシュします。次に、各レコードも個別にキャッシュします。
要約すると、DB に最適なデータ アクセス戦略は、memcache 戦略にはうまく適合しません。私は memcache レイヤーをオプションにしたいので (つまり、memcache がダウンしていても、サイトは引き続き機能します)、両方の長所を活用したいと考えていますが、そうするには、維持する必要があると確信しています。 2 つの異なる形式の多数のクエリ (1. インデックスを取得してからレコードを取得する、2. 1 つのクエリでレコードセットを取得する)。ページネーションでさらに複雑になります。DB では LIMIT/OFFSET SQL クエリを実行しますが、memcache では PK のインデックスを取得してから、関連する配列のスライスをバッチ取得します。
これをきちんと設計する方法がわからないのですが、何か提案はありますか?
あなたがこれに自分自身で立ち向かったのであればなおさらです。どのように処理しますか?