我们为客户提供关键应用程序。它是一个clickonce winforms应用程序,它使用几个与Oracle数据库通信的WCF服务。 该服务由Oracle Application Server托管,前面有两个Web缓存服务器,用于负载平衡。数据库位于另一台独立的计算机上。
事实上,应用程序现在性能很差,我们需要加快速度。我们尝试了许多技术:在分析解释计划时,通过添加索引来优化查询,减少客户端的服务调用以及分析客户端应用程序的陷阱。
但我真的希望两个在数据库或WCF上设置一个缓存层。数据非常关键且经常更改,因此有必要在所有请求中获取最新数据。 因此,当数据库中的数据发生更改时,缓存应立即过期。查询很复杂,最多有两个14-15个连接...
如何正确地执行此操作以及我应该使用哪些工具/框架?我听说过memcached ......这样好吗?
答案 0 :(得分:1)
因为您的代码可以看到数据的所有更新,所以您可以拥有一个非常有效的缓存层,因为缓存可以与数据库同时更新。
根据您对绝对缓存一致性的要求,您需要确保所有服务器都看到相同的缓存。您可以采取两种方法:
如果您使用缓存产品,则市场上有一个数字:memcached,gemfire,coherence,Windows Server AppFabric Caching等等
AppFabric Caching(项目正式名称为Velocity)的优点在于它可以免费使用Windows Server并且非常适合.NET(虽然它比其他一些更新,所以你可能会说不太经过验证)
答案 1 :(得分:1)
在添加新工具之前,您应该确保正确使用可用的所有Oracle缓存。
有buffer cache,PL/SQL function result cache,client query result cache,sql query result cache,materialized views,绑定变量有助于缓存查询计划。