Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 减少SQL Server缓存查询结果的开销_C#_Mongodb_Caching_Appfabric_Appfabric Cache - Fatal编程技术网

C# 减少SQL Server缓存查询结果的开销

C# 减少SQL Server缓存查询结果的开销,c#,mongodb,caching,appfabric,appfabric-cache,C#,Mongodb,Caching,Appfabric,Appfabric Cache,我有一个软件谁做了一些文件的基础上沉重的处理。 在这个过程中,我必须在SQL Server中查询一些表,这会破坏数据库和应用程序性能。(其他应用程序使用相同的表) 在优化查询和代码之后,可以获得更好的结果,但这还不够。经过研究,我找到了解决方案:缓存一些查询结果。我的想法是缓存正在处理的文件所需的一个特定表(标识为开销)行 我认为在使用AppCache Fabric(我在MS stack上)时,做了一些测试,它对小对象使用了大量内存(AppCache服务在没有对象的情况下使用了大约350MB的r

我有一个软件谁做了一些文件的基础上沉重的处理。 在这个过程中,我必须在SQL Server中查询一些表,这会破坏数据库和应用程序性能。(其他应用程序使用相同的表)

在优化查询和代码之后,可以获得更好的结果,但这还不够。经过研究,我找到了解决方案:缓存一些查询结果。我的想法是缓存正在处理的文件所需的一个特定表(标识为开销)行

我认为在使用AppCache Fabric(我在MS stack上)时,做了一些测试,它对小对象使用了大量内存(AppCache服务在没有对象的情况下使用了大约350MB的ram)。但是我需要在这些结果表中进行一些查询(比如搜索lastname、ssn、birthdate等)

我的第二个选择是MongoDb作为缓存存储。我对此进行了研究,我读到的大多数人都建议使用memcached或Redis,但我使用的是Windows服务器,它们不受官方支持


在这种情况下,使用mongo作为缓存存储是一种好方法吗?还是AppFabric缓存+标记搜索更好?

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

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

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


Appfabric我不太确定,因为它会有与您提到的相同的支持问题。你的预算是多少?您是否可以考虑在数据不经常更改的缓存解决方案上花费资金。真正的问题是我需要在每个文件行查询SQLServer的时间+我所做的查询类型(我的搜索主要是在varchar列中)。此查询正在阻止其他应用程序,并且处理文件的时间太长。今天,我在1.07小时内处理了一批(每个文件约1MB)260MB的文件,在不久的将来,我将处理GBs的文件,处理时间不能超过一天。如果数据非常静态,并且您唯一担心的是构建结果集需要很长时间,那么您可以创建“物化视图”(“Sql Server中的索引视图”)。请参见此处:您可能需要创建其他表等来创建搜索功能。然后,一些进程将填充所有这些。然后,您的数据将在Sql Server上高度可用。如果这不符合您的条件,您可以始终使用服务器内存和您选择的缓存机制。索引视图目前可以工作,并在一段时间内节省一些成本,但将来我必须使用缓存(在专用服务器中)以减少此开销。谢谢@T.S。