Как оптимизировать процесс импорта большого графа с сотней тысяч вершин и полмиллиона ребер в 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, как вы также указали, массовую вставку вы не можете использовать, а также многопроцессные подходы не могут использовать (соединение с сокетом только одно, и все ваши параллельные объекты будут сериализованы (как для конвейера), потому что пул соединений не реализован в драйвере, поэтому вы можете потерять преимущества многопроцессорности в производительности).