Просто случайный запрос по 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 - хранить сериализованный список всех заказов клиентов в собственном объекте кеша. Уменьшает количество поездок туда и обратно, но просто кажется отстойным.
Кто-нибудь может пролить свет на эту ситуацию?