在续集急切加载时,堆栈级别太深

时间:2014-06-05 22:04:22

标签: 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),但这似乎没有改变任何东西。

我猜我做的不好,但我没有知识(数学,cs,硬件)知道什么或为什么。

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

1 个答案:

答案 0 :(得分:0)

哈哈,是的。当你调用.all时,它将在一个块中返回整个数据集。

无论您计划如何处理数据都是错误的方法。如果您正在尝试迭代所有内容,请使用.find_each,如下所示:

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

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

Eqmifsequel.joins(:paauditsequels).count