这是我们领域模型的简单视图(我们在医疗保健领域):
Account
{
List<Registration> Registrations {...}
DateTime CreatedDate {...}
Type1 Property1 {...}
Type2 Property2 {...}
...
}
Registration
{
InsuranceInformation {...}
PatientVisit {...}
Type1 Property1 {...}
Type2 Property2 {...}
...
}
设置
- 我们使用 Nhibernate/FluentNH 来设置和配置 SessionFactory
- 假设我们已经设置了所有必需的表索引
用法
- 我们每天获得约 10,000 个新帐户
- 我们总共有大约 50 万个帐户。
- 我们有几个在这些帐户上运行的 Linq 查询
- 我们所有的查询都使用 Linq,大多数查询都是使用谓词构建器模式动态构建的(我们不使用 Hql)
问题是, 随着帐户数量的增加,这些查询的执行时间也会增加。
笔记:
- 只有在 48 小时窗口内的帐户才与我们的查询/申请相关。但是,需要保留旧帐户(因此无法删除)。尽管应用程序不需要这些帐户,但分析应用程序稍后可能会使用这些帐户
要解决此性能问题:
- 我们正在考虑归档超过 48 小时的帐户
- 创建与主数据库具有相同架构的存档数据库
- 添加计划在夜间基础上运行的 Windows 服务,将“旧”帐户从主数据库移动到存档数据库
- Windows 服务将使用 nhiberate 从主数据库中读取旧帐户并将旧帐户(再次使用 nhibernate)保存到存档数据库,然后从主数据库中删除旧帐户。目前,我们认为这项服务将一次移动一个帐户,直到所有旧帐户都移至存档数据库。
- 有时,当我们收到从存档数据库恢复帐户的请求时,我们将反转上述步骤
问题:
- 这种归档方法有用吗?如果不是,为什么?你能建议一些替代的实现吗?
- 我可以在复制过程中使用同一个 sessionfactory 连接到主数据库和存档数据库吗?如何动态更改连接字符串?我可以有两个使用两个数据库的模拟打开会话吗
- 我可以使用这种方法一次复制多个帐户吗?批量复制和批量删除?
任何帮助表示赞赏,感谢您的意见。