Rails 一次接收或访问的记录过多超时
Rails timing out too many records to receive or access at once
我目前正在处理一个问题,即报告接收到过多信息并导致后续加载超时或需要很长时间才能加载所有必要数据。据我所知,当前函数当前正在使用 find 方法 find_by_batches 可能对此更好,但我不确定这是如何实现的我当前的查找是在数组键上运行。我的意图仍然是获取数据,但可能对其进行批处理,以便加载速度更快。下面是嵌套数组的片段和示例。该问题发生在嵌套的消费者散列中,该散列具有许多具有通信者 key/values.
的个人消费者记录
module Reports
class GroupsController < ::ApplicationController
def consumers
@group = Group.find(consumer_params[:group_id])
end
private
def consumer_params
params.permit(:group_id)
end
end
end
Group : {
key1: value
key2: value
key3: value
key4: value
key5: value
},
consumers: {
{
key:value
key:value
key:value
},
{
key:value
key:value
key:value
}, etc...
}
}
Jvillian 最初是正确的,我的发现不是问题,因为查询不会导致任何加载问题。在测试不同的循环之后,所有的时序都是相似的。问题与显示如此大的数据集有关。
分页利用 Kaminari 和 API-Pagination gem 解决了这个问题。利用以下代码,我可以将列表分成每页 500 个消费者的页面。
module Reports
class GroupsController < ::ApplicationController
def consumers
@group = Group.find(consumer_params[:group_id])
@consumers = @group.consumers
paginate_json: @consumers, per_page: 500
end
private
def consumer_params
params.permit(:group_id)
end
end
end
json.conference @group, partial: 'group', as: :group
json.attendees @consumers, partial: 'consumer', as: :consumer
我目前正在处理一个问题,即报告接收到过多信息并导致后续加载超时或需要很长时间才能加载所有必要数据。据我所知,当前函数当前正在使用 find 方法 find_by_batches 可能对此更好,但我不确定这是如何实现的我当前的查找是在数组键上运行。我的意图仍然是获取数据,但可能对其进行批处理,以便加载速度更快。下面是嵌套数组的片段和示例。该问题发生在嵌套的消费者散列中,该散列具有许多具有通信者 key/values.
的个人消费者记录module Reports
class GroupsController < ::ApplicationController
def consumers
@group = Group.find(consumer_params[:group_id])
end
private
def consumer_params
params.permit(:group_id)
end
end
end
Group : {
key1: value
key2: value
key3: value
key4: value
key5: value
},
consumers: {
{
key:value
key:value
key:value
},
{
key:value
key:value
key:value
}, etc...
}
}
Jvillian 最初是正确的,我的发现不是问题,因为查询不会导致任何加载问题。在测试不同的循环之后,所有的时序都是相似的。问题与显示如此大的数据集有关。
分页利用 Kaminari 和 API-Pagination gem 解决了这个问题。利用以下代码,我可以将列表分成每页 500 个消费者的页面。
module Reports
class GroupsController < ::ApplicationController
def consumers
@group = Group.find(consumer_params[:group_id])
@consumers = @group.consumers
paginate_json: @consumers, per_page: 500
end
private
def consumer_params
params.permit(:group_id)
end
end
end
json.conference @group, partial: 'group', as: :group
json.attendees @consumers, partial: 'consumer', as: :consumer