我有一个基于某些文件进行繁重处理的软件。 我必须在进程中查询SQL Server中的一些表,这会破坏数据库和应用程序性能。 (其他应用程序使用相同的表格)。
优化查询和代码后,获得更好的结果但不够。经过研究,我达成了解决方案:缓存一些查询结果。我的想法是缓存正在处理的文件所需的一个特定表(标识为开销)行。
我想在使用AppCache Fabric(我在MS堆栈上),做了一些测试,它对小对象有大量的内存使用(appcache服务有大约350MB的ram使用没有对象)。但我需要在这些结果表中进行一些查询(例如搜索 lastname , ssn , birthdate 等)。
我的第二个选项是MongoDb作为缓存存储。我对此进行了研究,我读过的大多数人都建议使用memcached或Redis,但我使用的是Windows服务器而且他们并没有得到官方的支持。
在这种情况下使用mongo作为缓存存储是一种好方法吗?或AppFabric缓存+标签搜索更好?
答案 0 :(得分:1)
很难说出什么更好,因为我们对你的瓶颈知之甚少。很大程度上取决于您正在讨论的数据的质量。如果数据非常静态且不经常调用但编译数据集非常耗时,那么很好的解决方案可能是使用物化视图。如果经常调用此数据,则可以在某些服务器(例如app fabric)上更好地缓存它。 有许多技术和可能性。但你真的需要考虑网络流量,需求,大小等等。在不知道所有细节的情况下,很难回答这个问题。 看起来你是在正确的方式,但可能只是一个参数化的查询。很难说。但我会将Materialized视图添加到您刚刚发布的名单中。您可能只需要从所需的所有数据构建此视图,并只访问其内容。
答案 1 :(得分:0)
我向您提出的问题是,您的申请的长期目标或估算是什么?如果这是你要经历的最高负载,那么调整数据库或使用MVL将是一个答案。但对此的长期解决方案是分布式缓存,您已经在考虑这些问题。您的数据要求就是我们所谓的“参考数据”或“查找数据”,一旦您使用有限的数据库资源来排除多个查找,就会出现性能问题,您的数据库将成为性能瓶颈。
因此,您已经在考虑的解决方案是将此“引用”数据缓存在缓存中而无需转到数据库,同时保持缓存与数据库同步。
Appfabric我不太确定,因为它会有你提到的相同的支持问题。你的预算是多少?您能否考虑花费在像NCache?
这样的cachisng解决方案上