2013-04-28 33 views
0

我有一个软件根据某些文件进行繁重的处理。 我不得不在SQL Server中查询一些表的过程,这就是查杀数据库和应用程序的性能。 (其他应用程序使用相同的表格)。减少SQL Server开销缓存查询结果

优化查询和代码后,获得更好的结果,但不够。经过研究,我达成了解决方案:缓存一些查询结果。我的想法是缓存正在处理的文件所需的一个特定表(标识为开销)行。我认为在使用AppCache Fabric(我在MS堆栈中)时,做了一些测试,发现它对于小对象(appcache服务具有〜350MB的ram用法,没有对象)有很大的内存使用量。但我需要在这些结果表中的某些查询(如搜索姓氏SSN生日等)

我的第二个选择是MongoDB中的缓存存储。我对此进行了研究,大多数人阅读推荐使用memcached或Redis,但我使用的是Windows服务器,并且它们不受官方支持。

在这种情况下使用mongo作为缓存存储这是一个好方法?或者AppFabric Caching +标签搜索更好?

回答

1

很难说什么更好,因为我们对瓶颈不够了解。很大程度上取决于您正在讨论的数据的质量。如果数据是非常静态的,并且不会经常调用,但编译数据集非常耗时,那么最好的解决方案可能是使用物化视图。如果经常调用此数据,则比您更好地将其缓存在某个服务器上(例如应用结构)。 有许多技术和可能性。但是你真的需要考虑网络流量,需求,规模等等。在不知道所有细节的情况下,很难回答这个问题。 看起来你是正确的,但可能你需要的只是一个参数化查询。很难说。但是我会将Materialized视图添加到刚刚发布的名单中。可能您需要的仅仅是从您需要的所有数据构建此视图并访问其内容。

+0

等cachisng解决方案上的数据不会经常更改。真正的问题是我需要根据文件行查询SQLServer的时间量+我所做的查询类型(我的搜索主要在varchar列中)。此查询阻止其他应用程序,并且花费太长的时间来处理文件。今天,我在1.07小时内处理了一批(每个文件大约1MB)260MB,在不久的将来,我将处理GB文件,并且处理时间不会超过一天。 – Zingui 2013-04-28 20:52:57

+1

如果数据非常静态,并且只关注构建结果集需要很长时间,则可以创建“实体化视图”(Sql Server中的“索引视图”)。看到这里:http:// msdn。microsoft.com/en-us/library/dd171921%28SQL.100%29.aspx 您可能需要创建其他表格等来创建搜索功能。然后,一些进程将填充所有这些。然后您的数据将在Sql Server上高度可用。如果这不符合您的条件,您可以随时使用您选择的缓存机制的服务器内存。 – 2013-04-29 16:45:42

+0

索引视图现在可以工作并且可以节省一段时间的成本,但是将来我必须使用缓存(在专用服务器中)来减少这种开销。谢谢@ T.S。 – Zingui 2013-05-02 14:34:46

0

我给你的问题是你的应用程序的长期目标或估计是什么?如果这是您要花费的最高负载,那么调整数据库或使用MVL将是一个答案。但长期解决这个问题的方法是分布式缓存,并且您已经在考虑这些方面。您的数据需求就是我们所称的“参考数据”或“查找数据”,一旦您使用有限的数据库资源进行多次查询,就会出现性能问题,您的数据库将成为性能瓶颈。

因此,您已经想到的解决方案是将此“参考”数据缓存到缓存中,而无需转到数据库,同时保持缓存与数据库同步。

Appfabric我不会太确定,因为它会有你提到的相同的支持问题。你的预算是什么样的?你可以考虑花费在诸如NCache?