gpt4 book ai didi

performance - nhibernate - 归档记录

转载 作者:行者123 更新时间:2023-12-04 02:42:40 25 4
gpt4 key购买 nike

这是我们领域模型的简单 View (我们在医疗保健领域):

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 连接到主数据库和存档数据库吗?如何动态更改连接字符串?我可以有两个模拟打开 session 来处理两个数据库吗
  • 我可以使用这种方法一次复制多个帐户吗?批量复制和批量删除?

  • 任何帮助表示赞赏,感谢您的意见。

    最佳答案

    我认为您的问题与数据库有关,然后是休眠。拥有 50 万条记录的数据库并没有那么多。要优化访问,您应该考虑如何查询以及如何针对这些查询进行优化。

  • 只查询你需要的数据
  • 通过创建索引来优化您的表
  • 使用 20/80 规则,找到 20% 昂贵的查询并优化代码/查询。您的程序将快 80%
  • NHibernate:优化您的映射
  • HHibernate:如果您进行多次更新,请使用批量大小
  • 如果在代码中难以做到,请添加存储过程

  • 如果您的数据库增长,请聘请数据库专家就数据库优化提供建议(他们可以将您的性能提高 10% 到 90%)。您首先需要他几天,然后每周/每月一次,具体取决于工作量。

    关于performance - nhibernate - 归档记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7720382/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com