数据库连接(最佳做法)

本文关键字:最佳 数据库连接 | 更新日期: 2023-09-27 18:26:26

我的项目采用了Repository/Service设计模式,在构建它的过程中,我心想。

获取存储库的所有项目(将其保存在缓存中),然后使用LINQ进行筛选,而不是每次调用都使用数据库连接,这会更好吗。

例如,我有这个:

public Asset Get(int id)
{
    return GetAll().Where(a => a.Id == id).FirstOrDefault();
}
public IList<Asset> GetAll()
{
    return AssetData.Get(userId, companyId);
}

而不是:

public Asset Get(int id)
{
    return AssetData.Get(id, userId, companyId);
}
public IList<Asset> GetAll()
{
    return AssetData.Get(userId, companyId);
}

我认为第一个是最好的,因为它会加快系统速度,并且数据库连接/查询会更少。

那么,有人能向我解释一下这种情况下的最佳做法吗?

数据库连接(最佳做法)

这是过早的优化。在开始使用该应用程序之前,您不知道瓶颈会在哪里。请等待性能达到要求,然后再考虑如何提高性能。您也在猜测许多服务每天都在使用的一项经过验证的技术。如果处理得当,数据库是相当健壮和高性能的。

通过将存储库放在界面后面,您做了正确的事情。这为您提供了在不更改使用代码的情况下更改实现的灵活性。考虑使用像NHibernate这样内置缓存的ERM解决方案。重新发明别人一直在改进的轮子是没有意义的。

正如@Brian所评论的,这里的大问题是什么最适合您和您的特定场景。我(个人)会小心缓存任何有可能在请求之间过时的应用程序数据,即在您的情况下,用户已经更新了资产记录,但因为它被缓存了,所以在缓存过期或刷新之前,您的用户将无法看到更新(这只会让人困惑!)。

然而,我使用了与您在最近的一个应用程序中建议的类似的技术,在该应用程序中,我使用缓存的查找数据来填充返回DTO中的描述值。在测试过程中,这比数据库查询跨10多个表连接以获得这些值要快得多。我使用的查找数据很少更改,但我在30分钟后就过期了,以防万一。

我认为你还需要意识到过早的优化,并可能试图解决你实际上可能没有的问题。