c# - 数据库中有 1000 多个 Linq 查询或逻辑……哪个更糟?

标签 c# performance linq-to-sql domain-driven-design

我曾在 much more long-winded way a few days ago 中问过这个问题,考虑到篇幅,我没有得到答案这一事实不足为奇,所以我想我应该更切题。

我必须根据用户对特定客户的分配来决定向他们显示什么。域对象看起来像这个大大简化的示例:

public class Customer
{
    public string Name { get; set; }
    public IEnumerable<Users> AssignedUsers { get; set; }
}

在现实世界中,我还将评估他们是否有权限(对安全标志使用按位比较)来查看这个特定的客户,即使他们没有直接分配给它也是如此。

我正在努力坚持 domain-driven design (DDD) 原则在这里。此外,我正在使用 LINQ to SQL 进行数据访问。在我的服务层,我为请求客户列表的用户提供服务,该列表目前大约有 1000 项,并且每月增长约 2%。

如果我严格要求在服务层保留逻辑,我将需要使用 Linq 执行一个 .Where 来评估 AssignedUsers 列表是否包含请求的用户列表。当系统枚举通过时,这将导致对每个 Customer 的级联查询。我没有做过任何测试,但这似乎效率不高。

如果我捏造数据中的无逻辑,那么我可以简单地使用 GetCustomersByUser() 方法来执行 EXISTS 类型的 SQL同时查询和评估安全性。这肯定会更快,但现在我谈论的是逻辑逐渐进入数据库,这可能会在以后产生问题。

我敢肯定,这是人们在推出 Linq 时提出的一个常见问题……关于哪种方法更好有什么建议吗? Linq 的多个查询对性能的影响是否优于我数据库中的逻辑?

最佳答案

哪个更糟? 取决于你问谁。

如果您问 DDD 极端纯粹主义者,他们可能会说数据库中的逻辑更糟糕。

恕我直言,如果您问几乎任何其他人,尤其是您的最终用户、务实的开发人员以及为硬件和软件开发付费的人,他们可能会说性能受到较大影响会更糟。

DDD 和许多其他设计方法一样值得称赞,但是如果您教条地遵循它们以提出“纯”设计,那么它们所有都会失败现实世界的考虑因素,例如性能。

如果您真的必须对数据执行此类查询,那么几乎可以肯定数据库能够更好地执行该任务。

或者,您是否在这里“错过了一个把戏”。你的设计,无论多么 DDD,实际上是不对的吗?

总体而言 - 适本地使用您的工具。一定要努力在您的服务层中保持逻辑清晰分离,但不要在该逻辑执行大量数据库设计的工作时。

关于c# - 数据库中有 1000 多个 Linq 查询或逻辑……哪个更糟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3105959/

相关文章:

c# - 字典动态与对象和引用

c# - 单元测试存储库需要帮助/建议

c# - 为什么我的类(class)将一个集合保存到数据库而不是另一个?

MySQL Performance Schema 语句 DIGEST

c# - 带有重复项的 Linq-To-Sql 批量更新

c# - Web API Controller 返回任务并不总是等待任务完成(puppeteer-sharp)

performance - Sql 2008 在 Vista 64 中异常缓慢

java - Integer.parseInt(scanner.nextLine()) 与 scanner.nextInt()

c# - 如何在 C# 中使用具有相同表的两个数据库?

c# - 为什么我不能使用 LINQ to SQL 将数据更新到数据库中?