我已将联系人分组为具有关联订阅的集合。这些订阅经常被创建和删除......
每个联系人集合可以包含大约 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,它将联系人与标签表连接起来。任何人都知道一个很好的解决方案来处理带有对象标签的大集合?
谢谢!