как ускорить прошивку в neo4j из mysql?

У меня есть набор данных из 60000 элементов в mysql, и я пытаюсь вставить его в neo4j. Вставка происходит, но долго (примерно 10-15 в 3 сек). Есть ли способ ускорить его? также есть ли способ, которым я мог бы дать что-то вроде уникального ключа в neo4j, чтобы индексы дублирования не индексировались? Я новичок в neo4j.

Я использую neo4j 1.8 с драйвером PHP Everyman.


person hablema    schedule 03.12.2012    source источник
comment
Можно поподробнее об этой операции? Насколько я знаю, вы не можете просто заставить Neo4j «разбирать» файлы MySQL; это означает, что вы должны сначала извлечь данные из MySQL и сохранить их в Neo4j, во-вторых: производительность зависит от обоих этих шагов. Вы используете BatchInserter?   -  person raina77ow    schedule 03.12.2012
comment
Данные были извлечены из mysql с помощью запроса на выборку, и я не использую для этого пакетную вставку. Поскольку я новичок в этом, я следую примеру Джаделла ( github.com/jadell/neo4jphp/blob/master/examples/bacon.php ). Есть ли лучший способ сделать это?   -  person hablema    schedule 03.12.2012
comment
php-код, на который вы ссылаетесь, выполняет одну операцию http для каждого создания узла и настройки свойства, это должно быть, по крайней мере, пакетным пакетированием, лучше выполненным в шифре (также пакетным) или выполненным с использованием одного из инструментов импортера   -  person Michael Hunger    schedule 05.12.2012


Ответы (2)


Есть хорошая презентация от Max De Marzi о ETL в Neo4j.

См.: http://www.slideshare.net/maxdemarzi/etl-into-neo4j

Это зависит от того, какой язык вы хотите использовать, множество вариантов от java, встроенного через jruby, и удаленно через ruby, php, python.

Вы хотели бы группировать свои запросы в транзакциях соответствующего размера (например, 10 000 элементов на транзакцию).

Файлы CSV можно импортировать непосредственно в файл базы данных с помощью моего пакетного импортера или через BATCH REST API сервера Neo4j.

person Michael Hunger    schedule 03.12.2012
comment
Можете ли вы привести пример, когда данные передаются из mysql в neo4j в php? Это действительно помогло бы мне. - person hablema; 03.12.2012
comment
Всегда ли Neo4j тормозит при прошивке. Максимум, которого я смог достичь, это 100 узлов в секунду при пакетной вставке. Есть ли способ вставить, у меня есть около 2 миллионов узлов, которые нужно сделать из моей базы данных MySQL, а затем связать их. - person hablema; 04.12.2012
comment
это, кажется, не имеет прямого отношения к neo4j. у меня никогда не было такого медленного времени вставки, и я много импортировал psql-›neo4j. я предполагаю, что вы запрашиваете данные из mysql на ходу - попробуйте сначала запросить данные и вставить их в формат graphML или geoff xml. затем просто используйте некоторые встроенные функции, такие как gremlins g.loadGraphML('mysqlexport.xml') - docs.neo4j.org/chunked/snapshot/ - person ulkas; 04.12.2012
comment
neo может импортировать до 1 миллиона узлов в секунду :), используя что-то вроде упомянутого пакетного вставки, ему просто нужны файлы csv, которые вы можете легко сгенерировать из mysql, даже используя php. - person Michael Hunger; 05.12.2012

Как упоминалось выше, предпочтительным вариантом является пакетный импортер.

Если вам нужно пройти через PHP-клиент, здесь я привел пример, в котором используется пакетный API REST: http://phpfiddle.org/main/code/mu3-sgk

Вы можете протестировать ряды/пакеты, которые лучше всего подходят для вашей системы. Для моего ноутбука это 750, для моего тестового сервера это 1250. Json_decode, который происходит, сильно загружает процессор.

person Roelb    schedule 15.01.2013