Я использую активный импорт для импорта комментариев и Ancestry для построения деревьев комментариев.Есть ли способ создать дерево предков во время импорта (когда первичный ключ id
еще не создан)?
В настоящее время я импортирую все комментарии, затем перебираю каждый комментарий, чтобы добавитьродительский, и он очень медленный даже с индексами:
comments_to_import = []
import_data.each do |comment|
comments_to_import << Comment.new(is_parent: comment.parent_uuid.nil?, uuid: comment.uuid, parent_uuid: comment.parent_uuid, body: comment.body)
end
Comment.import comments_to_import
# build comment tree
Comment.where(is_parent: false, ancestry: nil).all.each do |c|
parent = Comment.find_by(uuid: c.parent_uuid)
c.update(parent: parent)
end
Обновление
Я использую индекс триграмм для ускорения like
запросов (именно это наследство использует при построении дерева),К сожалению, для создания миллионных комментариев все еще требуется много времени.
class AddTrigramToComments < ActiveRecord::Migration
def up
execute "CREATE INDEX index_comments_on_ancestry_trigram ON comments USING gin (ancestry gin_trgm_ops)"
end
def down
execute "DROP INDEX index_comments_on_ancestry_trigram"
end
end