Родословная с ActiveImport Slow Building Tree - PullRequest
0 голосов
/ 19 марта 2019

Я использую активный импорт для импорта комментариев и 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
...