我正在尝试使用 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/