Entity framework 4 实体,处理大量记录(>;3500万条)
我们有一组相当大的相关表,每个表都有超过3500万条相关记录。我需要创建两个WCF方法,用一些参数(数据范围、类型代码等)查询数据库,并返回相关的结果集(10到10000条记录) 该公司在EF4.0标准化,但对4.X开放。我也许可以提出迁移到5.0的理由,但可能性不大 使用实体处理如此大量的记录的最佳方法是什么?我应该创建一组存储过程并从实体调用它们,还是可以在实体中执行某些操作 我对数据库没有任何控制权,因此无法拆分表或创建一些物化视图或分区表Entity framework 4 实体,处理大量记录(>;3500万条),entity-framework-4,entity-framework-4.1,entity,entity-framework-5,Entity Framework 4,Entity Framework 4.1,Entity,Entity Framework 5,我们有一组相当大的相关表,每个表都有超过3500万条相关记录。我需要创建两个WCF方法,用一些参数(数据范围、类型代码等)查询数据库,并返回相关的结果集(10到10000条记录) 该公司在EF4.0标准化,但对4.X开放。我也许可以提出迁移到5.0的理由,但可能性不大 使用实体处理如此大量的记录的最佳方法是什么?我应该创建一组存储过程并从实体调用它们,还是可以在实体中执行某些操作 我对数据库没有任何控制权,因此无法拆分表或创建一些物化视图或分区表 非常感谢您的任何输入/想法/建议。我对EF4.1
非常感谢您的任何输入/想法/建议。我对EF4.1的经验,代码优先:如果您只需要阅读记录(即,您不会将其写回),您将通过针对您的上下文启用更改跟踪来获得性能提升:
yourDbContext.Configuration.AutoDetectChangesEnabled = false;
在加载任何实体之前执行此操作。如果需要更新加载的记录,可以随时调用
yourDbContext.ChangeTracker.DetectChanges();
在工作中调用SaveChanges()之前,我遇到了类似的情况。我们有一个包含许多表的数据库,其中大多数表都包含大约700-1000万条记录。我们使用实体框架来显示数据,但页面显示速度似乎非常慢(比如90到100秒)。甚至网格上的排序也需要时间。我的任务是看它是否可以优化。在分析完它之后(ANTS profiler),我能够优化它(在7秒内) 因此答案是是的,实体框架可以处理大量的记录(以百万计),但必须注意
如果你记住这些,EF应该提供与普通ADO.NET几乎相同的性能,如果不是相同的话。当我听到诸如“公司在EF4或EF5上实现了标准化”之类的言论时,这让我不寒而栗 这相当于租车公司说“我们已经为我们的整个车队标准化了单一车型” 或者一个木匠说:“我已经把凿子作为我的全部工具进行了标准化,我不会使用锯子、钻头等。” 对于正确的工作,有一种叫做正确的工具 此声明仅强调负责制定关键软件体系结构决策的人员对软件体系结构一无所知 如果您处理的记录超过10万条,并且数据模型非常复杂(即非常复杂),那么EF6可能不是最佳选择。 EF6基于动态反射的概念,具有与Castle项目活动记录类似的设计模式 是否需要将所有100K记录加载到内存中并对其执行操作?如果是,问问你自己,你真的需要这样做吗?为什么不跨100K条记录执行一个存储过程来达到同样的效果呢。进行一些分析,看看实际的数据使用模式是什么。也许用户执行的搜索返回了100K条记录,但他们只浏览了前200条记录。例如谷歌搜索,几乎没有人浏览数百万搜索结果中的第3页 如果答案仍然是“是”,则需要将所有100K记录加载到内存中并执行操作。那么也许你需要考虑一些其他东西,比如一个定制的有轻量级对象的写高速缓存。可能延迟加载嵌套对象的动态对象指针。等我使用的一个例子是电子商务站点的大型产品目录,其中针对目录执行了大量搜索。Why is是为了提供自定义行为,例如使用预编译的regex进行早期退出搜索和regex通配符搜索,或者在产品目录中提供自定义哈希表索引 这个问题没有一刀切的答案。这完全取决于数据使用场景以及应用程序如何处理数据。想想大猩猩vs鲨鱼谁会赢?这完全取决于我所处的环境