mysql - 续集急切加载时堆栈级别太深

标签 mysql ruby irb sequel

我正在尝试使用 Sequel ORM 急切地加载一个相对较大的表,以测试基于使用不同关键条件得到的结果量:

a = Eqmifsequel.eager(:paauditsequels).all

关系如下:

one_to_many :paauditsequels, :primary_key => [:serial_number,:customer_number], :key => [:serial_number,:cust]

表格尺寸如下

eqmifsequel : 69357 records
paauditsequel : 8648976 records

当我运行顶部的代码行时,出现“堆栈级别太深”错误。我尝试增加 ulimit 堆栈大小(最高 1GB),但这似乎没有改变任何东西。

我猜我做了一些坏事,但我没有知识(数学、计算机、硬件)来知道什么或为什么。

谁能给我一些建议吗?有没有办法可以计算当我尝试连接并返回两个大表时将使用多少堆栈空间?这与 Sequel 创建连接的方式有关吗?如果成功的话,我的系统最终会崩溃吗?

最佳答案

哈哈,是啊。当您调用 .all 时,它将在单个 block 中返回整个数据集。

无论您打算如何处理数据,这都是错误的方法。如果您尝试迭代所有内容,请像这样使用 .find_each :

Eqmifsequel.joins(:paauditsequels).find_each do |i|
  # something
end

如果您只对结果数量感兴趣:

Eqmifsequel.joins(:paauditsequels).count

关于mysql - 续集急切加载时堆栈级别太深,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24070945/

相关文章:

ruby - 如何在 IRB 中加载 ruby​​ 脚本?

MySQL 将多列选择为一列

mysql - 在 MySQL 中截断一组表的更快方法是什么?

mysql - 如何使用 MYSQL 运算符选择列所有值都必须可用 - MYSQL

python - Django 完整性错误 : no default value

ruby - 如何将自定义比较器传递给 "sort"?

ruby-on-rails - 如何使用 ActionMailer 通过 AWS SES 发送电子邮件

ruby-on-rails - 设计登录时多加一个条件来检查

ruby-on-rails - 如何从 IRB 运行 .rb 文件?

irb - 在 IRB rub​​y​​ 上加载文档