只是一個關於Microsoft Velocity的隨機查詢。Memcached/Microsoft速度性能問題
情景: 說,我想從我的數據庫的所有訂單。在SQL中,這很好,我可以做SELECT OrderId,TotalCost... from Orders
。這是我的數據庫的一次往返,每個人都很開心。
現在,如果我使用Memcached的或(如我現在使用)微軟速度(CTP3),有沒有簡單的方法來做到這一點。我看到的兩個選項是(僞代碼)
FOR EACH ORDER
Order = cache.TryGet(OrderId)
if Order is null
Order = db.Get(OrderId)
END FOR EACH
這將是往返LOADS。
另外,還要考慮我想通過客戶拿到訂單
SQL:Select OrderId....TotalCost from Orders where CustomerId = MyCustomerId
一個來回,大家都高興。
使用緩存解決方案有兩種解決方法我看到真的:
解決方案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
方案二是保持在它自己的高速緩存對象中的所有客戶訂單的序列化列表。減少往返旅程,但似乎跛腳。
有人可以闡明這一情況好嗎?
我同意你不應該總是使用緩存。我會說,是說我擁有訂單集合(或者甚至將所有訂單存儲在其自己的區域中),以便使用LINQ語法返回所有訂單: var x =來自Orders in dc .GetOrdersInRegion(「訂單」) select Orders.Value; 然後以這種方式遍歷它們。 如果我想要的訂單爲特定客戶,我會做 變種X =從dc.GetOrdersInRegion訂單(「訂單」) 其中((訂單)Orders.Value).CustomerId == customerGuid 選擇Orders.Value ; 兩者將具有相同的網絡流量 – sjhuk 2009-11-25 11:22:17
+1。通過一些易失性存儲器高速緩存查詢所有行只是沒有意義。 – filiprem 2009-12-21 21:44:08