实体,处理大量记录(> 3500 万条)

2024-01-07

我们有一组相当大的相关表,每个表有超过 3500 万条相关记录。我需要创建几个 WCF 方法,它们使用一些参数(数据范围、类型代码等)查询数据库并返回相关结果集(从 10 到 10,000 条记录)。

该公司采用 EF 4.0 进行标准化,但对 4.X 持开放态度。我也许可以提出迁移到 5.0 的论点,但可能性较小。

使用实体处理如此大量记录的最佳方法是什么?我应该创建一组存储过程并从实体中调用它们还是我可以在实体中执行某些操作?

我对数据库没有任何控制权,因此无法拆分表或创建一些物化视图或分区表。

非常感谢任何意见/想法/建议。


在我的工作中,我也遇到过类似的情况。我们有一个包含许多表的数据库,其中大多数每个表包含大约 7-1000 万条记录。我们使用Entity框架来显示数据,但页面似乎显示很慢(比如90到100秒)。甚至网格上的排序也需要时间。我接到的任务是看看它是否可以优化。在对它进行分析(ANTS分析器)之后,我能够对其进行优化(7秒以下)。

所以答案是是的,实体框架可以处理大量记录(以百万计),但必须小心

  1. 了解仅在需要实际记录时才调用数据库。所有操作都只是用于进行查询(SQL),因此请尝试仅获取一条数据,而不是请求大量记录。尽可能修剪获取大小
  2. 是的,不应该,您必须使用存储过程并将它们导入到您的模型中,并为它们导入函数。您也可以直接调用它们 ExecuteStoreCommand()、ExecuteStoreQuery()。函数和视图也是如此,但 EF 有一种非常奇怪的调用函数“SELECT dbo.blah(@id)”的方式。
  3. 当 EF 必须填充具有深层层次结构的实体时,EF 的执行速度会变慢。对于具有深层层次结构的实体要格外小心。
  4. 有时,当您请求记录并且不需要修改它们时,您应该告诉 EF 不要监视属性更改 (AutoDetectChanges)。这样记录检索会快得多
  5. 数据库索引很好,但对于 EF 来说它变得非常重要。用于检索和排序的列应该正确建立索引。
  6. 当你的模型很大时,VS2010/VS2012模型设计师会变得非常疯狂。因此,将您的模型分解为中型模型。存在一个限制,即来自不同模型的实体无法共享,即使它们可能指向数据库中的同一个表。
  7. 当您必须在不同位置对同一实体进行更改时,请尝试通过传递该实体来使用同一实体并仅发送一次更改,而不是每次都获取一个新的部分,进行更改并存储它(真正的性能增益技巧)。
  8. 当您仅需要一列或两列中的信息时,请尽量不要获取完整的实体。你可以直接执行你的sql或者有一个迷你实体。您可能还需要在应用程序中缓存一些常用的数据。
  9. 交易缓慢。小心他们。

如果您记住这些事情,EF 应该提供与普通 ADO.NET 几乎相似的性能(如果不一样的话)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实体,处理大量记录(> 3500 万条) 的相关文章

随机推荐

  • NetworkX:在 DAG 中查找最长路径,返回最大的所有关系

    我无法弄清楚如何更新 networkx dag find longest path 算法以返回 N 表示关系 而不是返回找到的第一个最大边 或返回与最大权重相关的所有边的列表 我首先从 pandas 数据帧创建了一个 DAG 其中包含如下子
  • Python 是 vs == [重复]

    这个问题在这里已经有答案了 可能的重复 Python 中的字符串比较 is 与 https stackoverflow com questions 2988017 string comparison in python is vs 什么时候
  • 使用 Remember_me 时注销后 Flask-Login 仍然登录

    要使用 Flask login 在 Flask 中注销用户 我只需调用 logout user 但是在添加一些额外的会话检查后 在我单击注销并再次单击返回 登录页面 后 我仍然登录 它发生了只有当我选择 记住我 时 我想我在这里误解了 se
  • 本地和远程重命名 Git 分支? [复制]

    这个问题在这里已经有答案了 有没有办法在本地重命名 Git 分支并将其推送到远程分支 即使已经有很多提交推送到远程分支 或者 是否需要创建一个新的本地分支 删除旧的本地分支 然后在远程仓库上重复操作 Yes 特点move存在以在本地重命名分
  • 创建树结构

    我正在开发一个 asp net 项目 在我的 aspx 页面中 我有一个 gridview 它有 3 列 元素 目标 父级 在客户端 我想使用 gridview 中的数据构建一个树结构 然后用数字构建一个树 我找到了有关如何构建图形的信息和
  • YouTube onPlayerReady 永远不会被触发

    知道为什么这个脚本不起作用吗 我想要的只是追踪onStateChanged事件 但也从未被调用过 当我使用下面的代码打开 html 文档时 我没有错误 youtube 脚本加载得很好 播放器对象不是undefined 看起来也不错 docu
  • 基于函数的索引没有提高查询性能

    我已经创建了视图 并在该视图中添加了我需要的以下 case 语句 并且我已经为其创建了基于函数的索引 该视图有1900000条记录 当我尝试执行该视图时 需要几个小时才能运行 并且该视图的性能非常低 我不明白如何提高性能 CREATE OR
  • Java 中最大字符串不匹配数

    我最近在 codehub 上遇到了一个问题 但无法解决这个查询 谁能帮我解决这个问题吗 给定一个长度为 N 的字符串 S 您可以选择并反转 S 中任意长度的任何子字符串 您可以多次执行此操作 通过执行操作确定最大不匹配数 不匹配 S 被定义
  • 阻止 & 符号变成 Windows 窗体绑定的助记符/加速器 [重复]

    这个问题在这里已经有答案了 可能的重复 在标签控件绑定到用户填充的属性的屏幕上 我在标签上看到带下划线的字符 助记符 因为基础数据包含 符号 例如 如果绑定属性包含 A B Trucking 则标签显示为 AB Trucking 且 B 带
  • 如何从 Azure AD 获取帐户?

    我有一个很好的 Azure Active Directory 设置有十几个用户 都是我 所以我有一个租户 ID 客户端 ID 和客户端密钥 我还在开发一个简单的控制台应用程序 它将充当该目录的公共客户端 该客户端还保存用户名和密码列表 因为
  • 在从类构造函数调用的方法中初始化最终变量[重复]

    这个问题在这里已经有答案了 今天我遇到了一种奇怪的行为 我不明白为什么 想象一下 我们在 Java 的一个典型类中有一个 Final 变量 我们可以立即初始化它或在类构造函数中初始化它 如下所示 public class MyClass p
  • indexOfObjectsPassingTest 或filteredArrayUsingPredicate 哪个性能更快?

    当需要过滤 NSArray 以获取返回数组中的项目子集时 哪种方法更快更频繁且在边缘情况下 以下测试 Release模式下编译 在Mac Pro上执行 indicate that filteredArrayUsingPredicate慢于i
  • xcode 中的文件夹结构与 finder 中的文件夹结构

    我在 xcode 中有一个项目的以下文件夹结构 但是 我在Finder中有上述文件结构 有没有办法将文件结构从 xcode 反映到 finder 我最近发现了一个命令行工具这将完全满足您的需要 你可以在这里找到它 https github
  • 将单击的按钮的值从一个页面传递到另一页面 输入字段

    这个问题问得很奇怪 兜圈子 我有 2 页 第 1 页 上面有一个按钮 喜欢
  • 使用 Mockito 2 模拟服务会导致存根错误

    我尝试使用 Mockito 模拟类的行为 这使用 Mockito 1 x 有效 迁移到 JUnit 5 和 Mockito 2 似乎不再起作用了 ExtendWith MockitoExtension class public class
  • 为地图中的多边形着色,以便相邻多边形具有不同的颜色

    我制作了以下地图 library sf library leaflet library leafgl library colourvalues library leaflet extras nc lt st read system file
  • runMain 中的 sbt 非法动态引用

    我正在尝试运行代码生成器 并向其传递文件名以写入输出 resourceGenerators in proj Compile Def task val file resourceManaged in proj Compile value sw
  • 查明 Objective-C 类是否重写了方法 [重复]

    这个问题在这里已经有答案了 如何在运行时确定一个类是否重写了其超类的方法 例如 我想知道一个类是否有它自己的实现isEqual or hash 而不是依赖超类 您只需要获取方法列表 然后查找您想要的方法 import
  • 在 Flash 模式下寻找超出缓冲线的视频

    网络服务器模块ngx http mp4 module or mod h264 streaming允许 Flash 客户端使用 start 参数寻找超出下载缓冲区线的视频 例如 http server com path to video mp
  • 实体,处理大量记录(> 3500 万条)

    我们有一组相当大的相关表 每个表有超过 3500 万条相关记录 我需要创建几个 WCF 方法 它们使用一些参数 数据范围 类型代码等 查询数据库并返回相关结果集 从 10 到 10 000 条记录 该公司采用 EF 4 0 进行标准化 但对