【发布时间】:2011-04-04 02:27:31
【问题描述】:
我们有一个应用程序(规则引擎),它在内存中有很多表来执行某些业务规则。该引擎还用于在需要时回写数据库。
数据库结构是非规范化的,我们有 5 个事务表,有时也需要查询这些表以进行报告。
这里的问题是,我们想在应用程序中缓存数据,所以它在应用程序启动时加载,然后只有在数据库发生变化时才会改变。
有什么建议吗?
我们倾向于创建一个数据库服务,它将处理所有插入、更新和删除,并将它们排队以减少数据库服务器上的负载(事务表也有大量索引)。此外,我们正在考虑让 DB 服务位于顶部并为所有需要直接 DB 访问的报告/其他应用程序提供服务。
这里的目的当然是减少每个请求的 Select 查询的 DB 命中率,并确定事务的优先级。还要确保访问应用程序的人不会关闭数据库服务器。
Rules Engine 是一个 C# 桌面应用,报告和其他应用都是基于网络的。
解决此问题的最佳方法是什么?我还考虑过从我的事务表中删除所有索引,并将触发器插入到一个新表中,该表将是一个副本,但为报告检索编制了索引。
【问题讨论】:
-
您要解决的问题是什么?当前的性能痛点是什么?
-
绘制点是: 1. Table Lock 问题,同一张表的写入/读取次数过多。 2. 每个业务事务检查规则时数据检索缓慢,规则基于数据库中的其他表,因此每个业务事务,这可能意味着对 5 个不同的表进行 5 个不同的选择查询。为相同的表查询 SQL 服务器只是我想避免的成本。 3.上面#2中提到的数据可能会发生变化,轮询/数据缓存到期似乎并不“优雅”
标签: c# .net linq linq-to-sql msmq