【发布时间】:2009-11-19 18:24:17
【问题描述】:
只是一个关于 Microsoft Velocity 的随机查询。
场景:
假设我想要数据库中的所有订单。在 SQL 中,这很好,我可以做到 SELECT OrderId,TotalCost... from Orders。这是我数据库的一次往返,每个人都很高兴。
现在,如果我正在使用 Memcached 或(正如我现在使用的)Microsoft Velocity (CTP3),那么没有简单的方法可以做到这一点。我看到的两个选项是(在伪代码中)
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
来回一趟,大家开心。
使用缓存解决方案,我确实看到了两种解决方案:
解决方案 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 是在它自己的缓存对象中保存所有客户订单的序列化列表。减少往返行程,但看起来很蹩脚。
有人可以解释一下这种情况吗?
【问题讨论】:
标签: c# sql memcached appfabric