Как оптимизировать процесс импорта большого графа с сотней тысяч вершин и полмиллиона ребер в Orientdb посредством pyorient?

Orientdb : 2.1.3
Pyorient : 1.4.7

Мне нужно импортировать граф с сто тысяч вершин и полмиллиона ребер в Orientdb с помощью Pyorient.

db.com и один за другим

Во-первых, я просто использую db.command("создать вершину V set a=1"), чтобы вставить все вершины и ребра одну за другой.

Но это занимает у меня около двух часов.

Поэтому я хочу найти способ оптимизировать этот процесс.

Массивная Вставка?

Затем я нахожу, что Orientdb поддерживает Massive Insert, но, к сожалению, автор pyorient в проблеме массовой вставки: нет транзакций? упомянул, что

в кратком протоколе (и, конечно, в пиориенте) нет массивного намерения вставки.

Пакет SQL

Pyorient поддерживает пакет SQL. Может быть, это возможность!

Я просто собрал все команды вставки и запустил его с помощью db.batch().

Я беру график с 5000 вершин и 20000 ребер, например

  • пакет SQL

    vertexs : 25.1708816278 s
    edges : 254.248636227 s
    
  • оригинал

    constrct vertexs : 19.5094766904 s
    construct edges : 147.627924276 s
    

..Похоже, что пакет sql стоит гораздо больше времени.

Поэтому я хочу знать, есть ли способ сделать это.

Благодарю.

1 ответ

Решение

Когда вы делаете одну за другой запись, вы уже пытались увидеть, получаете ли вы лучшую производительность, используя Transactional Graph и фиксируете каждые X элементов?? Обычно это правильный способ вставить много данных. К сожалению, используя pyorient, как вы также указали, массовую вставку вы не можете использовать, а также многопроцессные подходы не могут использовать (соединение с сокетом только одно, и все ваши параллельные объекты будут сериализованы (как для конвейера), потому что пул соединений не реализован в драйвере, поэтому вы можете потерять преимущества многопроцессорности в производительности).

Другие вопросы по тегам