我正在开发一个旨在展示大量SKU的电子商务网站。描述这些产品的SQL Server模式已经标准化,几年前,检索提供给客户的必要信息变得非常慢,因此我们改变了基础设施,以便承担加载数据的成本。每个产品一次,然后将该数据存储在AppFabric缓存(以前的Velocity)中。
随着时间的推移,我们对AppFabric基础架构的要求越来越复杂(想象一下),迫使我们花费大量时间编写代码来处理来自缓存的数据检索,数据更新(包括增量更新等)。 / p>
我们碰巧将大部分产品数据存储在副数据库中的非规范化形式中,因此为了实验,我编写了一个控制台应用程序,一次随机选择一个~150K SKU,然后检索记录我们的非规范化表中的那个产品。
我很惊讶地发现我能够在大约相同的平均时间内选择这些记录,我可以从AppFabric缓存中选择一条记录,两种情况下平均约为2.5毫秒。我敢肯定,在这两种情况下,数据都来自一种或另一种内存缓存,无论是AppFabric还是磁盘缓存,并且2.5 ms会在网络往返的最短时间内发生冲突。 / p>
这让我觉得在SQL Server中使用非规范化数据来满足我们的高负载/高性能需求可能会更好。基于SQL Server的数据的管理工具要好得多。我们团队中的所有开发人员都擅长使用Management Studio,而使用AppFabric我们有一个开发人员可以使用PowerShell来a)给我们一个存储在缓存中的记录数量b)转储缓存。我们必须自己创建的任何其他管理功能。
这让我想问为什么有人会想要使用AppFabric。我们不关心成本,因为我们必须应用于AppFabric相关解决方案的开发工作的成本远远超过SQL Server许可的成本。
感谢您提供的任何反馈,以帮助我们的团队确定前进的最佳方向。
答案 0 :(得分:3)
决定使用缓存机制应该是一个经过深思熟虑的过程 - 并不总是正确的选择。但是,在持久持久性模型上使用缓存的主要原因是管理极高的事务负载。
在AppFabric Cache中,我可以设置一组分布式服务器来处理一个逻辑存储库 - 具有内置的负载平衡。因此,与无法为负载平衡提供集群实例的Microsoft SQL Server不同 - 如果我每天读取和写入数千到1亿次,则缓存是共享这些资源的更可行的解决方案。然后,随着时间的推移,这些写入可以排队到持久性持久性模型,确保在使用中没有真正的高峰,因为它在整个缓存结构和持久存储中都是分散的。
答案 1 :(得分:3)
使用AppFabric而不是包含非规范化架构的专用缓存数据库还可以提供对缓存密钥到期,逐出和调优区域策略的细粒度控制的好处。如果您使用SqlServer,则必须自己滚动它。我也同意@ mperrenoud03关于负载平衡和高事务率支持的评论。此外,如果你使用像NHibernate这样的好的ORM工具,它可以配置为使用Appfabric(或其他分布式缓存平台)作为二级缓存。我们正在项目中利用这一点并取得良好的效果。