繁体   English   中英

最佳实践缓存:单片与细粒度缓存数据

[英]Best-practice caching: monolithic vs. fine-grained cache data

在分布式缓存场景中,通常建议使用或避免存储在缓存中的单片对象吗?

我正在使用由EAV架构支持的服务,所以我们正在实施缓存,以最小化从数据库中检索所有主要记录和相应属性集合时EAV强加的感知性能缺陷。 我们将在服务启动时填充缓存。

我们没有特别频繁地调用所有产品 - 客户端在首次使用对象映射填充其本地缓存后调用差异。 为了执行该差异,分布式缓存将需要反映对任意执行的数据库中的各个记录的更改,并在客户端调用差异时进行更改。

首先想到的是使用List或Dictionary将记录存储在分布式缓存中 - 获取整个集合,在本地内部操作或搜索它,将整个集合放回缓存中。 然而,后来的思考导致了使用单个记录填充缓存的想法,每个记录的键入方式使它们可以从/可更新地单独检索到缓存。 这导致想知道在更新所有数据时哪种方法更具性能。

我们正在使用Windows Server AppFabric,因此我们可以使用BulkGet操作。 我不相信有任何批量更新的概念。

是否普遍存在分布式缓存对象大小的想法? 如果我们对所有项目有更多请求,我会担心网络带宽,但至少现在,对所有项目的需求应该相当小。

是的,我们将测试和分析每种方法,但我想知道在这里考虑当前的思考范围之外还有什么。

因此,在我们的场景中,似乎首选整体缓存对象。 使用数据中心的大型管道,大约30 MB的序列化产品数据通过线路几乎没有可察觉的时间。 使用Dictionary<TKey, TValue>我们能够快速查找集合中的产品,以便返回或更新单个项目。

由于数千个单独的实体(均低于1 MB)在缓存中,批量操作只需要太长时间。 网络操作中的开销太大,延迟太多。

编辑:我们现在正在考虑维护实体和整体的实体集合,因为对于整体来说,检索单个实体似乎成为一个相当昂贵的生产数据集过程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM