Entity framework 大容量数据库的ORM

Entity framework 大容量数据库的ORM,entity-framework,sql-server-2008,linq-to-sql,orm,normalization,Entity Framework,Sql Server 2008,Linq To Sql,Orm,Normalization,我正在从事一个新的项目,该项目以数据为导向,意味着数据量非常大(每天都在增加)。因此,请建议我应该使用哪种类型的方法来实现desire功能,而不存在任何障碍 数据库是否完全规范化 哪个ORM(linq2sql,实体框架)适合这个项目 我应该使用存储过程、db函数、触发器等吗 数据库是否规范化是您需要知道和回答的问题 至于ORM:它实际上取决于数据的类型及其结构 Linq到SQL是一个非常简单的ORM,它基本上只进行表到域对象的1:1映射。只要你不需要任何其他东西-那很好。LINQtoSQL不再

我正在从事一个新的项目,该项目以数据为导向,意味着数据量非常大(每天都在增加)。因此,请建议我应该使用哪种类型的方法来实现desire功能,而不存在任何障碍

  • 数据库是否完全规范化
  • 哪个ORM(linq2sql,实体框架)适合这个项目
  • 我应该使用存储过程、db函数、触发器等吗

数据库是否规范化是您需要知道和回答的问题

至于ORM:它实际上取决于数据的类型及其结构

Linq到SQL是一个非常简单的ORM,它基本上只进行表到域对象的1:1映射。只要你不需要任何其他东西-那很好。LINQtoSQL不再被积极开发,所以这可能是一个缺点。此外,对存储过程的支持有点有限

实体框架(至少在.NET4中)很棒,是微软当前选择的ORM——它正在积极开发,有很多支持,有很多灵活性。它提供了数据库优先、模型优先和代码优先的开发样式,支持POCO对象和自跟踪实体,并且与存储过程集成得非常好(如果愿意,可以为每个实体定义一个用于插入、更新和删除的存储过程)。这将是我的第一选择

NHibernate是一个伟大的企业级ORM,已经建立并正在积极开发中——当然不是像Linq到SQL那样的“死胡同”。我几年前就用过它,虽然它很棒而且功能强大,但它比EF4(没有视觉设计师,需要更多的体力劳动和体力劳动)更难学。如果你真的需要它的所有力量,如果你愿意投入必要的前期学习时间,那就太好了


至于数据库:存储的进程绝对值得研究,特别是当您需要将某些数据库处理封装到一个好的进程中,以便从代码中调用时。对于过多地使用触发器和函数,我会非常谨慎和防御性——它们有自己的位置,但不应该过度使用,因为它们确实会带来一些问题(主要是性能问题和“可发现性”问题)-许多开发人员不考虑可能存在的触发器,也不了解发生了什么事)。

@Xulfee,这是一个相当广泛的问题,很大程度上取决于项目的性质。您引用的方法会影响整个体系结构的许多方面。例如:

数据库是否完全规范化?
数据库规范化通常有助于解决概念模型的复杂性问题。当适当(注意,我没有说“完全”)规范化时,您的模型应该是相当直接的,数据库的消费者(开发人员、BI团队、领域专家等)应该能够很好地了解使用数据库处理的业务问题。话虽如此,规范化可能会导致相当大的报告和分析问题。在针对大型、相当规范化的数据库编写报表查询时,可能会通过连接大量表而带来性能问题。进入。所以,对于你的问题:这要看情况。您的报告要求是什么?您平均需要支持多少个事务?您的概念模型有多复杂?您是否能够将数据库分解为关联的较小模型,而不是一个较大的模型

哪个ORM(linq2sql,实体框架)适合这个项目?
同样,ORM是一种工具。你必须问问自己,你想要完成的具体工作是什么?选择ORM(或者甚至首先使用ORM)是我建议您尽早做出的决定,因为它会影响从性能到开发团队凝聚力的所有方面。有很多很好的选择:

上述每一个框架在抽象持久层方面都做得非常出色。每种方法都有其优点和缺点,其中大部分都涉及到基础设施问题:性能、配置、模式/语言兼容性、持久性模式、供应商支持。如果有选择,我会问自己,我的开发团队最喜欢哪种框架?哪一个支持我期望的系统活动级别?我愿意与哪家供应商“合作”?我看到过相当成功的系统使用相当小的ORM(即Stackoverflow使用Linq To Sql的修改版本),而相当大的系统使用相当复杂的ORM失败

我应该使用存储过程、db函数、触发器等吗?
这个问题的中心是您的持久性存储以及您如何使用它(以及您想让DBA生气到什么程度)。存储过程(存储过程)的使用使您的dba能够以非常精细的级别提供安全性。此外,如果您正在使用的orm生成动态sql,您可能会受益于数据库缓存使用存储过程生成的查询的能力。DB功能可以是双面刀片。它们能够为您的模型添加功能和智能,同时允许您在性能方面获得相当大的成功(即表值UDF)。触发器有其自身的缺陷,应该谨慎使用,但这种讨论可能会涉及到很多问题。在这种情况下,我的底线是:您希望在数据库中支持多少逻辑,以及安全性和性能有多重要?您是否有一位合格的dba(不仅是一位知道如何编写查询的开发人员,而且是一位能够进行性能调优和数据建模的dba)?你的数据库有多大?您的数据有多复杂?在决定如何管理数据时,请考虑所有这些问题以及更多问题

总之,你