是否有使用游标或智能获取的 Ruby ORM?

2024-03-27

我正在寻找 Ruby ORM 来替代 ActiveRecord。我一直在研究 Sequel 和 DataMapper。它们看起来不错,但似乎都没有做基本的事情:当您不需要时,不将所有内容加载到内存中。

我的意思是我已经在有很多行的表上的 ActiveRecord 和 Sequel 上尝试了以下(或等效方法):

 posts.each { |p| puts p }

两人都为记忆而疯狂。他们似乎将所有内容加载到内存中,而不是在需要时获取内容。我用的是find_in_batches在 ActiveRecord 中,但这不是一个可接受的解决方案:

  1. ActiveRecord 不是一个可接受的解决方案,因为我们遇到了太多问题。
  2. 为什么我的代码应该了解分页机制?我很高兴在某个地方配置页面的大小,但仅此而已。和find_in_batches你需要做类似的事情:

    post.find_in_batches { |batch|批次.each { |p|把 p } }

但这应该是透明的。

那么是否有可靠的 Ruby ORM 可以正确获取数据呢?


Update:

正如 Sergio 提到的,在 Rails 3 中你可以使用find_each这正是我想要的。然而,由于 ActiveRecord 不是一个选项,除非有人真正说服我使用它,否则问题是:

  1. 哪些 ORM 支持相当于 find_each 的功能?
  2. 怎么做?
  3. 为什么我们需要一个find_each, while find应该这样做,不是吗?

续集的Dataset#each确实一次会生成单独的行,但大多数数据库驱动程序会首先将整个结果加载到内存中。

如果您使用Sequel的Postgres适配器,您可以选择使用真实游标:

posts.use_cursor.each{|p| puts p}

默认情况下,一次提取 1000 行,但您可以使用一个选项来指定每次游标提取要抓取的行数:

posts.use_cursor(:rows_per_fetch=>100).each{|p| puts p}

如果您不使用 Sequel 的 Postgres 适配器,则可以使用 Sequel 的分页扩展:

Sequel.extension :pagination
posts.order(:id).each_page(1000){|ds| ds.each{|p| puts p}}

然而,就像 ActiveRecord 的find_in_batches/find_each,这会执行单独的查询,因此如果您正在检索的数据集存在并发修改,您需要小心。

这不是 Sequel 中的默认值的原因可能与它不是 ActiveRecord 中的默认值的原因相同,即在一般情况下它不是一个好的默认值。只有具有大型结果集的查询才真正需要担心它,并且大多数查询不会返回大型结果集。

至少有了 Postgres 适配器光标支持,可以很容易地将其设为模型的默认值:

Post.dataset = Post.dataset.use_cursor

对于分页扩展,您实际上不能这样做,但您可以将其包装在使其基本上透明的方法中。

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

是否有使用游标或智能获取的 Ruby ORM? 的相关文章

随机推荐

  • 在 DOS/Batch 中,08 小于 1,但 07 大于 1。为什么?

    在 DOS 批处理中 if 08 lss 1 echo true 与 真 相呼应 09也是如此 08和09都小于1 However if 07 lss 1 echo true 不回显任何内容 01至07不小于1 为什么 08年和09年有什么
  • WebGL 绘制图像

    我是 WebGL 新手 之前在 Java 中使用过 OpenGL 我一直在尝试编写一个简单的函数 该函数以特定的大小和旋转在特定位置绘制图像 但在网上搜索了一段时间后 我的代码仍然无法运行 目前 我已经成功绘制了图像 但是该图像距离正确的位
  • 如何监听Hyperledger Fabric中的事件(commit事件)?

    我们建立了一个结构服务器 并将一些事务放入其中 我们有一些应用程序将与结构服务器配合 这是一个情况 应用程序发送交易fabric sdk java or fabric sdk node 面料执行chaincode 结构通知应用程序结果 应用
  • python中函数的精确计时

    我正在 Windows 上用 python 编程 希望准确测量函数运行所需的时间 我编写了一个函数 time it 它接受另一个函数 运行它 并返回运行所花费的时间 def time it f args start time clock f
  • ORA-02270: 此列列表没有匹配的唯一键或主键

    我有一张表 结构是 CREATE TABLE COURSE ACCREDITED COURSE ID VARCHAR2 50 NOT NULL ENABLE ACCREDITATION BODY ID VARCHAR2 50 NOT NUL
  • 如何覆盖 Material-ui 的选项卡选择颜色?

    我正在使用 Materialui tabs 主题构建 React 16 13 0 应用程序 https material ui com api tab https material ui com api tab 我在我的组件中创建了这些样式
  • 张量流是否通过pdf传播梯度

    可以说 分布函数定义如下 dist tf contrib distributions Normal mu sigma 并从分布中抽取样本 val dist pdf x 并且该值在模型中用于预测变量 X hat f val loss tf n
  • 使用指针传递引用和值[重复]

    这个问题在这里已经有答案了 我不明白为什么将指针传递给函数不会更改传入的数据 如果函数原型如下所示 void func int p 并且 func 为 p 分配了内存 为什么不能在函数外部使用它 我以为指针就是地址 虽然这样的事情符合你的期
  • 我如何使用肘节检查连接性?

    我需要使用连接库检查应用程序内每个页面的连接性 所以我将在提供者内部使用一肘 问题是何时关闭流以便在用户关闭应用程序时可以处理它 像这样 import package connectivity connectivity dart overr
  • 比较 sbt 和 Gradle [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在深入研究 Scala 并注意到 sbt 我对 java groovy 项目中的 Gradle 非常满意 而且我知道 Gradle 有一个
  • 使用 R 在时间序列图中标记 X 轴

    我对 R 有点陌生 一般绘图经验有限 我已经能够使用zoo将我的数据作为R中的时间序列对象来获取 但是我很难正确标记xaxis 如果这一切的话 当我绘制动物园对象时 plot z x 轴仅显示一个标签 即 2010 年 该系列从 2009
  • 在Javascript中实现迷宫生成算法[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我了解 深度优先 迷宫生成算法 但我
  • 在每第 3 个 div Jquery 之后附加 Span 标签

    我正在寻找在每三个 div 标签之后放置一个 span 标签的解决方案 HTML div class grid 15 div class grid 5 p Sun p div div class suggest nudge up span
  • 护照认证失败导致重定向循环

    我正在使用带有 Facebook 身份验证的 Node Express 和 Passport 我有以下路线 当 facebook auth callback是回调url function render page req res var us
  • 不推荐使用带大括号的数组和字符串偏移访问语法

    我刚刚将我的 php 版本更新到 7 4 我注意到弹出了这个错误 不推荐使用带大括号的数组和字符串偏移访问语法 这是我的代码的一部分 它触发了上述错误 public function getRecordID string zoneID st
  • 无法在 IOS 上通过 CORS 发送凭据

    我有一个恶作剧问题 在解决这个问题很长时间后我来找你 我有一个具有以下规格的混合应用程序 Ionic 3 9 2 Angular 5 2 11 Cordova Android 8 1 0 and iOS 5 1 1 Cordova 8 0
  • UISearchBar显示错误:文本太左,与放大镜图标重叠

    我遇到了最奇怪的显示错误UISearchBar 这是我的代码 在另一个应用程序中完美运行 我在代码中创建搜索栏 因为 xib 文件不可行 searchBar UISearchBar alloc initWithFrame CGRectMak
  • 将 ForEach 与绑定数组一起使用 (SwiftUI)

    我的目标是从 JSON 动态生成表单 除了生成 FormField 视图 基于 TextField 并绑定到动态生成的视图模型列表之外 我已将所有内容放在一起 如果我将 FormField 视图替换为普通的 Text 视图 则效果很好 请参
  • 如何以编程方式设置开始标签和结束标签之间的文本格式,然后删除标签

    编辑 以下工作与 Google Apps 脚本有关 用于格式化 Google 文档中的文本 我不熟悉 JavaScript 实际上只完成了一些 R 编码 因此这项工作是对我可以在 google 上搜索到的内容进行一些解析以及一些尝试和错误
  • 是否有使用游标或智能获取的 Ruby ORM?

    我正在寻找 Ruby ORM 来替代 ActiveRecord 我一直在研究 Sequel 和 DataMapper 它们看起来不错 但似乎都没有做基本的事情 当您不需要时 不将所有内容加载到内存中 我的意思是我已经在有很多行的表上的 Ac