使用 Django ORM 处理大量大记录

2023-11-23

我有一个包含大约 30k 记录的表,我正在尝试使用 Django 的 ORM 对其进行迭代和处理。每条记录存储几个二进制 blob,每个二进制 blob 的大小可以是几 MB,我需要对其进行处理并将其写入文件。

然而,由于内存限制,我在使用 Django 时遇到了麻烦。我的系统有 8GB 内存,但在处理大约 5k 条记录后,Python 进程消耗了所有 8GB 内存并被 Linux 内核杀死。我尝试了各种清除 Django 查询缓存的技巧,例如:

  1. 定期调用MyModel.objects.update()
  2. setting settings.DEBUG=False
  3. 定期调用 Python 的垃圾收集器gc.collect()

然而,这些似乎都没有任何明显的效果,并且我的进程继续经历某种内存泄漏,直到崩溃。

我还有什么可以做的吗?

由于我一次只需要处理每条记录,并且在此过程中我永远不需要再次访问同一条记录,因此我不需要保存任何模型实例,也不需要一次加载多个实例。如何确保只加载一条记录并且 Django 缓存nothing并在使用后立即取消分配所有内存?


尝试使用迭代器。

QuerySet 通常会在内部缓存其结果,以便重复 评估不会导致额外的查询。相比之下, iterator() 将直接读取结果,而不做任何缓存 QuerySet 级别(在内部,默认迭代器调用 iterator() 并缓存返回值)。对于返回较大值的 QuerySet 您只需要访问一次的对象数量,这可能会导致 更好的性能和显着减少的内存。

这是 django 文档中的引用:https://docs.djangoproject.com/en/dev/ref/models/querysets/#iterator

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

使用 Django ORM 处理大量大记录 的相关文章

随机推荐

  • 为什么在 Intellij 中使用 Android SDK 时缺少 Android AVD Manager?

    I am trying to use the Android SDK in my IntelliJ project that is a larger project containing both web and ios clients a
  • Numpy:作为 Matlab 进行赋值和索引

    有时 分配仅具有一个索引的数组很有用 在 Matlab 中这很简单 M zeros 4 M 1 5 end 1 M 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 Numpy 有没有办法做到这一点 首先 我想展平数组 但该操
  • 最适合拼写检查器、字典和同义词库的算法和数据结构

    实施的最佳方式 字典 有没有比 Trie 更好的 DS 字典 同义词库 不知道 因为匹配的是单词的含义 相似的含义 拼写检查器 比哈希映射更好的东西 如果可能的话 提供正确的拼写建议 当在一小时的面试中被问到 我们是否需要为算法编写 c c
  • Android 搜索:使用 FTS 表以及普通 SQLite DB 表

    这更多的是一个设计问题 而不仅仅是一个编码问题 我已经有一个将数据存储在 SQLite DB 表中的应用程序 现在我想添加搜索功能 据我了解 为了启用搜索功能 我需要 FTS 表 我拥有的表格是 不完全相同 但给出了非常相似的示例 内容表
  • Android 音频:改变音调

    SoundPool 的 Android 文档称 该应用程序还可以通过实时调整多普勒或合成效果的播放速率来改变音调 所以我尝试这样做 使用 setRate 方法从一个音符平滑地变化到另一个音符 但结果很糟糕 声音变化非常参差不齐 这是我尝试过
  • MySQL 使用 CONCAT 条件进行选择

    我正在尝试在脑海中编译它 我有一个包含名字和姓氏字段的表 我有一个像 Bob Jones 或 Bob Michael Jones 这样的字符串以及其他几个字符串 问题是 例如我有 鲍勃的名字 以及 迈克尔 琼斯的姓氏 所以我想 SELECT
  • Java流是否有相当于带有变量赋值的while

    是否存在与以下内容等效的流 List
  • Tensorflow 从元图中打印所有占位符变量名称

    我有一个张量流模型 其中有 meta 和检查点文件 我试图打印模型所需的所有占位符 而不查看构建模型的代码 以便我可以在不知道模型是如何创建的情况下构建输入 feed dict 作为参考 这里是模型构建代码 在另一个文件中 def save
  • 优秀的 setjmp/longjmp 教程 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 你好 我想阅读有关 C 语言 setjmp longjmp 的优秀教程 如果有真实的而不是人造的示例 那就更好了 Thanks 这并不是一个真正的教程 而是libpng 文档描述该库
  • 应用程序更新后共享首选项丢失

    我一整天都在研究这个问题 以下是要点 共享首选项should当用户更新应用程序时保持持久性 就我而言 更新应用程序后 它们丢失了 这个问题每次都会重现 我从 Play 商店安装旧的 APK 然后adb install r new apk使用
  • 色彩校正 MP4/Webm 视频

    我有一个大型视频 其中一些动画对于其他嵌入方法 gif png 序列等 来说太复杂 太长 并且我们遇到了视频中颜色的问题 本质上 我们将网页背景作为视频的一部分 以防止视频播放时出现任何边缘 我们正在尝试使视频上的渐变背景与网页上的渐变背景
  • Jenkins 的 Github 插件获取提交者和作者姓名

    如果我理解得很好 git 插件会将提交者和作者的姓名以及电子邮件暴露给环境变量GIT AUTHOR NAME GIT COMMITTER NAME GIT AUTHOR EMAIL and GIT COMMITTER EMAIL基于git的
  • Netbeans 等待连接到 XDEBUG

    Netbeans 不会连接到 xdebug 我尝试过以下帖子中的建议 调试 IDE 与 XDebug 的端口连接 等待连接 netbeans 显示 正在等待连接 netbeans xdebug 但这并不能解决我的问题 Netbeans 似乎
  • 带分隔符的 Android 列表视图

    我想创建一个带有分隔符的列表视图 就像在默认联系人应用程序中一样 我的应用程序需要对列表进行排序 并用分隔符分隔项目 如联系人应用程序中的字母顺序排序 能够使用分隔符标题进行滚动将是一个额外的优势 任何指示都会有帮助 谢谢 看看这个开源项目
  • 为什么 numpy.dtype('float64') 很特别?

    有人可以解释以下脚本输出背后的逻辑吗 import numpy if numpy dtype numpy float64 None print Surprise 谢谢 看起来像是一场不幸的事故 有人决定dtype None 将 默认 浮动
  • 如何创建可重用的表单 Vue 组件

    假设我想创建一个联系表单 在此联系表单中 用户可以有多个地址 我认为这是使用 Vue 组件的绝佳机会 这样我就不必创建冗余的地址表单字段 然后我就可以在网站的不同区域使用这个组件 比如编辑 创建等 我将如何创建一个父级可以使用的表单组件 并
  • 将参数传递给 Dart Polymer 元素

    我能找到的 Dart Polymer 的唯一可靠示例不使用任何参数 如何将参数传递给模板 是通过构造函数完成的吗 我的具体示例是 我有一个带有标题的卡片元素 我想将卡片的标题作为字符串传递给该元素 我看过将数据传递给 Polymer 元素
  • 使用 CLASP 测试 GAS 时如何模拟依赖关系

    背景 我最近了解到CLASP并对使用的可能性感到兴奋TDD编辑我的谷歌应用脚 本 天然气 本地 NOTE 可能有一种方法可以使用现有的 GAS 编辑器编写测试 但如果可能的话 我更愿意使用现代编辑器 clasp 效果很好 但我无法弄清楚如何
  • 谷歌图表时间线水平滚动

    我有一个时间线图表 与本页的第一个示例非常相似 https developers google com chart interactive docs gallery timeline 我在 Y 轴上有活动 做午餐 吃饭 等等 在 X 轴上我
  • 使用 Django ORM 处理大量大记录

    我有一个包含大约 30k 记录的表 我正在尝试使用 Django 的 ORM 对其进行迭代和处理 每条记录存储几个二进制 blob 每个二进制 blob 的大小可以是几 MB 我需要对其进行处理并将其写入文件 然而 由于内存限制 我在使用