2012-03-21 43 views
0

我有一个移动到Azure的ASP.net应用程序。在应用程序中,有一个查询连接9个表以生成用户记录。然后每个记录在json中序列化并与客户端来回发送。为了提高查询性能,9个查询第一次运行并且记录在json中被序列化,结果字符串被保存到一个名为JsonUserCache的表中。该表只有2列:JsonUserRecordID(这是唯一的)和JsonRecord。每次从客户端请求用户记录时,首先会查询JsonUserCache表以避免必须使用9个连接执行查询。当用户注销时,他在JsonUserCache中创建的记录被删除。NoSQL和AppFabric与Azure

表JsonUserCache是​​SQL Server。我可以简单地离开一切,但我想知道是否有更好的方法。我正在考虑创建一个简单的字典,它将存储关键字/值并将该字典放在AppFabric中。我还在考虑使用NoSQL提供程序,如果有Azure的选项,或者我应该坚持使用AppFabric中的字典。或者,还有另一种选择吗?

感谢您的建议。

+0

你能澄清你指的是什么术语AppFabric?你的意思是缓存服务?或者是其他东西? – 2012-03-21 08:44:49

+0

我的意思是将字典存储在AppFabric中。我读到AppFabric是RAM存储器,所以我认为可能会比SQL Azure或表存储更快,因为这两个依赖于硬盘驱动器IO – frenchie 2012-03-21 08:59:56

回答

1

“计算机科学中只有两个难题:缓存失效和命名事情。”

菲尔Karlton

你都清楚地谈论一个高速缓存,并作为一般原则,你不应该坚持所有缓存数据(在SQL或其他地方),你有过期的缓存问题并且必须执行删除操作(就像您现在所做的那样)。如果你坚持在某处存储你的结果,并且不介意之后的清理,那么就把它放在Azure blob中 - 这很容易从浏览器访问,并且不要求你的请求由你自己的应用程序来处理。

要实现它作为传统的缓存,看看这些选项。

  1. 开箱即用ASP.NET缓存,您可以在网络角色的内存中缓存。这意味着您的加入将在用户转到的每个实例上重新运行,但取决于实例的数量以及平均会话的持续时间可能是最简单的实现。
  2. 使用AppFabric Cache。这是一个额外的API学习和额外的成本可能会相当高,如果你有很多独特的访问者。
  3. 使用专门的分布式缓存,如Memcached。这会增加成本/麻烦,不得不自己来运行它,但从长远来看,它会给你很大的灵活性。

编辑:所有都是基于RAM的。使用ASP.NET缓存更容易实现,并且从缓存中检索数据的速度更快,因为它位于同一台机器上 - 但要求为Web角色的每个实例(即未分发)填充缓存。 AppFabric缓存是分布式的,但也有点慢(网络延迟),根据可扩展性的不同,AppFabric缓存当前的行为有点不规律 - 因此请确保您运行测试。如果你想要可扩展的,功能丰富的分布式缓存,并且它是你的应用程序的重要组成部分,那就去Memcached吧。

+0

这些选项中的哪一个将从RAM工作?我认为AppFabric会这样做; ASP.net缓存呢?我应该提到,我打算在多个实例中运行该应用程序,并使用asp.net引擎运行wcf服务;以后会有一个工人角色出现。使用ASP.net缓存与AppFabric有什么区别?请注意,我并不关心成本,只是可扩展性和性能。它看起来像blob不会工作:json字符串是通过HTTPS传输的用户敏感数据。 – frenchie 2012-03-21 13:19:36