0

我已将联系人分组为具有关联订阅的集合。这些订阅经常被创建和删除......

每个联系人集合可以包含大约 30.000 - 50.000 个对象。

在为 30.000 个联系人创建订阅时,我会遍历联系人集合并填充一个 sql 值数组。之后,我手动执行一个包含所有这些值的 sql insert 语句:

sql_values = []
contacts.each do |contact|
  sql_values << ["(#{contact.id}, #{newsletter.id}, #{contact_group_id})"]
end
if sql_values.any?
  ActiveRecord::Base.connection.execute(
    "INSERT INTO subscriptions (contact_id, newsletter_id, contact_group_id) VALUES #{sql_values.join(", ")}"
  )
  sql_values = nil
end

SQL 插入只需要一秒钟左右,没关系。在我的开发机器(8GB RAM)上选择联系人大约需要 15 秒。生产机器只有 1GB 内存...

你有什么方法来减少这个时间?

编辑:我的问题是acts_as_taggable,它将联系人与标签表连接起来。任何人都知道一个很好的解决方案来处理带有对象标签的大集合?

谢谢!

4

0 回答 0