2015-04-15 45 views
1

Я импортирую данные около 12 миллионов узлов и 13 миллионов отношений.Большой импорт данных в neo4j

Сначала я использовал импорт csv с периодическим фиксацией 50000 и разделил данные на разные куски, но все-таки это заняло слишком много времени.

Затем я увидел метод ввода партии. Но для метода пакетной вставки мне нужно создавать новые наборы данных в листе excel.

В основном я импортировать данные из SqlServer: Я сначала сохранить данные в формате CSV, а затем импортировать его в мой Neo4j.

Кроме того, я использую версию сообщества neo4j. Я изменил свойства для подобных, как я нашел в stackoverflow. Но поначалу с preiodic commit 50K он идет быстрее, но после 1 миллиона это занимает слишком много времени.

Есть ли способ импортировать эти данные непосредственно из sql за короткий промежуток времени, поскольку neo4j славится своей быстрой работой с большими данными? Любые предложения или помощь?

Вот НАГРУЗКИ CSV используется (индекс числа (число)):

USING PERIODIC COMMIT 50000 load csv with headers from "file:c:/Users/hasham munir/Desktop/Numbers/CRTest2/Numbers.csv" 
AS csvLine fieldterminator ';' 
Merge (Numbers:Number {num: csvLine.Numbers}) return * ; 

USING PERIODIC COMMIT 50000 load csv with headers from "file:c:/Users/hasham munir/Desktop/Numbers/CRTest2/Level1.csv" 
AS csvLine fieldterminator ';' 
MERGE (TermNum:Number {num: csvLine.TermNum}) 
MERGE (OrigNum:Number {num: (csvLine.OrigNum)}) 
MERGE (OrigNum)-[r:CALLS ]->(TermNum) return * ; 
+0

это поможет нам, если вы можете поделиться своей командой csv загрузки и вашими индексами и ограничениями схемы. –

+0

'create index on: Number (num); ИСПОЛЬЗОВАНИЕ ПЕРИОДИЧЕСКОГО КОМИТЕТА 50000 загружает csv с заголовками из файла: c: /Users/ha/Desktop/Numbers/CRTest2/Numbers.csv «AS csvLine fieldterminator»; Объединить (числа: число {num: csvLine.Numbers}) return *; ИСПОЛЬЗОВАНИЕ ПЕРИОДИЧЕСКОГО КОМИТЕТА 50000 загружает csv с заголовками из файла: c: /Users/ha/Desktop/Numbers/CRTest2/Level1.csv «AS csvLine fieldterminator»; MERGE (TermNum: Число {номер: csvLine.TermNum}) MERGE (OrigNum: Число {номер: (csvLine.OrigNum)}) MERGE (OrigNum) - [г: ВЫЗОВЫ] -> (TermNum) возвращение *; ' –

+0

Пожалуйста, измените свой ответ с помощью загрузки csv. вы можете добавить также свои настройки памяти кучи java и версию neo4j, которую вы используете. –

ответ

1

Вы можете изменить параметры кучи 4096Мб.

Кроме того, во втором LOAD CSV используются номера, используемые для двух первых MERGE уже в базе данных? Если да, используйте вместо этого MATCH.

Я также хотел бы совершить на уровне 10000.

2

Как долго он принимает?

Чтобы дать вам ссылку, мой db имеет около 4 м узлов, 650 000 уникальных отношений, свойства ~ 10 м-15м (не такие большие, но должны обеспечить идею). Мне требуется менее 10 минут, чтобы загрузить файл узлов + установить несколько ярлыков, а затем загрузить в файл отношений + установить отношения (все через LOAD CSV). Это также делается на компьютере под управлением, но если у вас есть часы, я бы сделал некоторые настройки.

Мои предложения заключаются в следующем:

  • Вы намеренно возвращаются узлы после сливаться? Я не могу себе представить, что вы что-то делаете с этим, но в любом случае, подумайте об удалении RETURN *. С помощью RETURN * вы возвращаете все узлы, отношения и пути, найденные в запросе, и это неизбежно замедляет работу. (http://neo4j.com/docs/stable/query-return.html#return-return-all-elements)

  • Является ли поле «num» уникальным? Если да, рассмотрите возможность добавления следующих ограничений (ПРИМЕЧАНИЕ: это также создаст индекс, поэтому не нужно создавать его отдельно). Я думаю, что это может ускорить MERGE (я не уверен в этом), хотя см. Следующий пункт.

    СОЗДАТЬ СОКРАЩЕНИЕ ВНУТРИ (числа: число) ASSERT Numbers.num IS UNIQUE;

  • Если поле num уникально И это новая база данных (т.е. вы начинаете с нуля при запуске этого скрипта), а затем вызывайте CREATE для создания узлов, а не MERGE (для создания только узлы).

  • Как уже упоминалось Кристофом, вы должны увеличить размер кучи до 4 г.

Сообщите нам, как это делается!

EDIT 1 Я не смог найти много актуальной информации о настройке памяти/производительности для версии Windows. То, что я нашел, оставляет меня с несколькими вопросами и является потенциально устаревшим.

Это потенциально устарело, но дает некоторые сведения о некоторых из разных настроек и различиях между Windows и Linux.
http://blog.bruggen.com/2014/02/some-neo4j-import-tweaks-what-and-where.html

Эти различия между Windows, & Linux, сами изменились с одной версии на другую (как показано с помощью следующих ссылок)
Cypher MATCH query speed,
https://stackoverflow.com/a/29055966/4471711

ответ Майкла выше, кажется, указывает, что если вы «НЕ запускать Java-приложение с Neo4j, вам не нужно беспокоиться о куче (-Xmx), однако это не кажется правильным в моей голове, учитывая другую информацию, которую я видел, но, возможно, вся эта другая информация до 2.2.

Я также прошел через это. http://neo4j.com/docs/stable/configuration.html

Итак, то, что я сделал, задает как кучу (-Xmx в neo4j.vmoptions), так и pagecache до 32g.

+0

Спасибо, Brooks Я не могу изменить кучу java, я нашел ее в ' neo4j-coomunit \ bin \ neo4j-community.vmoptions', если я ошибаюсь Местоположение. В сообществе нет файла конфигурации.Кроме того, я использую Merge, потому что Numbers содержит два разных типа один входящий, а один - исходящий. Иногда входящие номера отображались как исходящий номер или наоборот в этом сценарии, чтобы избежать дублирования, который я использую для слияния. Я попытался создать и различные ограничения на входящие и исходящие узлы. Но при использовании разных ограничений у меня было два узла для одного и того же числа. –

+0

Я предполагаю, что с вашего пути вы используете версию Windows? – Brooks

+0

исправьте меня, если я ошибаюсь, это pagecahe в свойствах и кучах одинаковы? потому что мой pagecahe 10g –

Смежные вопросы