只是关于 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 是在它自己的缓存对象中保存所有客户订单的序列化列表。减少往返,但似乎很蹩脚。
有人可以阐明这种情况吗?