gpt4 book ai didi

entity-framework - 工作单元如何与批处理一起使用?

转载 作者:行者123 更新时间:2023-12-03 09:00:41 25 4
gpt4 key购买 nike

构建 Web 应用程序时,标准做法是每个 HTTP 请求使用一个工作单元,并在处理请求后刷新所有更改并提交事务一次。

构建批处理过程时使用什么方法?一个工作单元实例是否用于整个流程的执行,并在逻辑点定期提交事务?

这可能更多是一个讨论,而不是一个事实问题,但我希望找出是否存在类似于“每次请求 session ”的普遍接受的“最佳实践”。

最佳答案

工作单元是您的业务交易。它是在 ISession 范围内定义的。应该更短;但也不能太短。这就是为什么建议使用“Session-Per-Request”。这样,您可以利用各种 UoW 功能,如跟踪、一级缓存、自动刷新等。这可以避免一些数据库往返并提高性能。

如果 ISession 范围非常短,例如 Session-Per-Operation(根本没有 UoW),您会错过上面提到的所有这些好处。

通过不必要地增加 ISession 范围(例如每个应用程序的 session 或对不相关的操作进行分组),您会产生许多问题,例如无效的代理状态、增加的内存使用量等。

考虑到上述情况,对于批处理,请尝试识别批处理中较小的 UoW。如果您可以将批处理分成小的 UoW 部分,请继续进行。如果您无法拆分批处理,您有两种方法可以选择:

  1. 整个批处理的单个 ISession:
    如果您的批处理一遍又一遍地处理相同的记录,那么这可能很有用。通过延迟刷新,您将获得一些性能优势。
    即使您的批处理仅处理每条记录一次,由于减少了刷新并节省了数据库的往返次数,这仍然可能会受益。请参阅下面的第 2 点。
  2. 为批量操作的每个操作新建 ISession:
    如果您的批处理仅处理每条记录一次,那么这可能会更好。我不能肯定地说,因为完整的场景未知。

两者都有上述的缺点;最好尝试找出批处理中较小的 UoW。

对于批量读取操作,IStatelessSession 是更好的解决方案。

关于entity-framework - 工作单元如何与批处理一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50705354/

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