Microsoft Velocity に関するランダムなクエリです。
シナリオ: データベースからすべての注文が必要だとします。SQL では、これで問題ありませんSELECT OrderId,TotalCost... from Orders
。これは私のデータベースへの 1 回の往復であり、全員が満足しています。
現在、Memcached または (現在使用しているように) Microsoft Velocity (CTP3) を使用している場合、これを行う簡単な方法はありません。私が見る2つのオプションは(疑似コードで)
FOR EACH ORDER
Order = cache.TryGet(OrderId)
if Order is null
Order = db.Get(OrderId)
END FOR EACH
これは往復の負荷になります。
また、顧客から注文を受けたいと考えています
SQL:Select OrderId....TotalCost from Orders where CustomerId = MyCustomerId
一往復、みんなでハッピーに。
キャッシュされたソリューションを使用すると、私が実際に目にする 2 つのソリューションがあります。
解決策 1:
DOES CustomerOrderIdsForCustomerId EXIST
NO
POPULATE CustomerOrderIdsForCustomerId FROM DATABASE
YES
FOR EACH OrderId IN CustomerOrdersForCustomerId
cache.TryGet(OrderId)
IF Order IS NULL
Order = db.Get(OrderId)
END FOR EACH
解決策 2 は、すべての顧客注文のシリアル化されたリストを独自のキャッシュ オブジェクトに保持することです。往復を減らしますが、不自由なようです。
誰かがこの状況に光を当てることができますか?