2016-03-17 7 views
0

Моя проблема - это код, который, кажется, что-то делает, а затем останавливает без обмена сообщениями в файле message.log или в браузере.Neo4j: отслеживание активности

Обновление: Что происходит, сервер завершает свою работу, но браузер не получает уведомление и не сообщает результат.

Я бегу следующий код:

USING PERIODIC COMMIT 500 
LOAD CSV WITH HEADERS FROM "file:/D:/OpenData/ProKB/tmp/KbText.csv" as line 
CREATE (kt:KbText {kbid: line.kbid, seq: line.seq,kbtext: line.kbtext}) 
with kt 
match (kb:KBase {kbid: kt.kbid}) 
with split(tolower(kt.kbtext), " ") as words, kb, kt 
with [w in words WHERE NOT w in ["the", "and", "i", "to", "or", "", "Knowledge", "Article"]] as txt, kb, kt 
foreach (wd in txt | 
    merge (v:Vocabulary {word: wd}) 
    merge (kt)-[:WORD]->(v) 
    merge (v)-[:KB]->(kb) 
    ) 
with txt, kb, kt 
unwind range(0, size(txt)-2) as wordnum 
merge (kbs1:KbSentence {kbid: kb.kbid, word: txt[wordnum], seq: wordnum}) 
merge (kbs2:KbSentence {kbid: kb.kbid, word: txt[wordnum+1], seq: wordnum+1}) 
merge (kbs1)-[:NEXT]->(kbs2) 

merge (kbs1)-[:TEXT]->(kt) 
merge (kbs2)-[:TEXT]->(kt) 

merge (kt)-[:WORDSEQ]->(kbs1) 
merge (kt)-[:WORDSEQ]->(kbs2) 

: схема является:

 
Indexes 
    ON :ErrLink(kbid)  ONLINE 
    ON :ErrLink(errnum) ONLINE 
    ON :KBase(kbid)  ONLINE 
    ON :KBase(groupcode) ONLINE 
    ON :KbGroup(groupcode) ONLINE 
    ON :KbGroup(kbgroup) ONLINE 
    ON :KbLink(kbid)  ONLINE 
    ON :KbLong(kbid)  ONLINE 
    ON :KbSentence(kbid) ONLINE 
    ON :KbSentence(seq) ONLINE 
    ON :KbSentence(word) ONLINE 
    ON :KbText(kbid)  ONLINE 
    ON :KbTextWord(kbid) ONLINE 
    ON :KbTextWord(word) ONLINE 
    ON :KbTxtWord(kbid) ONLINE 
    ON :ProError(errnum) ONLINE 
    ON :Vocabulary(word) ONLINE 

No constraints 

и некоторое время я вижу активность в журнале транзакций, а затем останавливается. В то время, что происходит, следующие сообщения появляются в файле журнал:

 
2016-03-17 12:32:03.234+0000 INFO [o.n.k.i.a.i.s.OnlineIndexSamplingJob] Sampled index :KbText(kbid) with 36998 unique values in sample of avg size 113992 taken from index containing 113992 entries 
2016-03-17 12:32:23.244+0000 INFO [o.n.k.i.a.i.s.OnlineIndexSamplingJob] Sampled index :KbText(kbid) with 36998 unique values in sample of avg size 123992 taken from index containing 123992 entries 
2016-03-17 12:32:43.349+0000 INFO [o.n.k.i.a.i.s.OnlineIndexSamplingJob] Sampled index :KbText(kbid) with 36998 unique values in sample of avg size 132992 taken from index containing 132992 entries 
2016-03-17 12:33:03.247+0000 INFO [o.n.k.i.a.i.s.OnlineIndexSamplingJob] Sampled index :KbText(kbid) with 36998 unique values in sample of avg size 143992 taken from index containing 143992 entries 
2016-03-17 12:36:13.308+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] Check Pointing triggered by scheduler for time threshold [18762]: Starting check pointing... 
2016-03-17 12:36:13.308+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] Check Pointing triggered by scheduler for time threshold [18762]: Starting store flush... 
2016-03-17 12:36:13.721+0000 INFO [o.n.k.i.s.c.CountsTracker] About to rotate counts store at transaction 18762 to [D:\OpenData\ProKB\Neo4j\neostore.counts.db.a], from [D:\OpenData\ProKB\Neo4j\neostore.counts.db.b]. 
2016-03-17 12:36:13.743+0000 INFO [o.n.k.i.s.c.CountsTracker] Successfully rotated counts store at transaction 18762 to [D:\OpenData\ProKB\Neo4j\neostore.counts.db.a], from [D:\OpenData\ProKB\Neo4j\neostore.counts.db.b]. 
2016-03-17 12:36:13.915+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] Check Pointing triggered by scheduler for time threshold [18762]: Store flush completed 
2016-03-17 12:36:13.915+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] Check Pointing triggered by scheduler for time threshold [18762]: Starting appending check point entry into the tx log... 
2016-03-17 12:36:13.988+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] Check Pointing triggered by scheduler for time threshold [18762]: Appending check point entry into the tx log completed 
2016-03-17 12:36:13.988+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] Check Pointing triggered by scheduler for time threshold [18762]: Check pointing completed 
2016-03-17 12:36:13.988+0000 INFO [o.n.k.i.t.l.p.LogPruningImpl] Log Rotation [41]: Starting log pruning. 
2016-03-17 12:36:13.988+0000 INFO [o.n.k.i.t.l.p.LogPruningImpl] Log Rotation [41]: Log pruning complete. 

Браузер показывает вращающийся круг точек, и если открыть другой браузер, в базу данных новых меток/отношения этого код должен создавать - не существует.

Как я могу отслеживать, что происходит во время загрузки, поэтому я вижу, что он что-то делает, и при необходимости корректирует код?

+0

Какие индексы/ограничения вы определили? Не могли бы вы поделиться выходом ': schema'? –

+0

В этой статье есть: схема –

+0

. Моя главная забота - это не производительность, а то, что вся активность, кажется, останавливается, когда она попадает на контрольно-пропускной пункт. –

ответ

1

Ваша команда LOAD CSV показывает вверх в плане запроса в eager pipe, проверить это с помощью:

explain LOAD CSV WITH HEADERS FROM "file:/D:/OpenData/ProKB/tmp/KbText.csv" as line 
CREATE (kt:KbText {kbid: line.kbid, seq: line.seq,kbtext: line.kbtext}) 
with kt 
match (kb:KBase {kbid: kt.kbid}) 
with split(tolower(kt.kbtext), " ") as words, kb, kt 
with [w in words WHERE NOT w in ["the", "and", "i", "to", "or", "", "Knowledge", "Article"]] as txt, kb, kt 
foreach (wd in txt | 
    merge (v:Vocabulary {word: wd}) 
    merge (kt)-[:WORD]->(v) 
    merge (v)-[:KB]->(kb) 
    ) 
with txt, kb, kt 
unwind range(0, size(txt)-2) as wordnum 
merge (kbs1:KbSentence {kbid: kb.kbid, word: txt[wordnum], seq: wordnum}) 
merge (kbs2:KbSentence {kbid: kb.kbid, word: txt[wordnum+1], seq: wordnum+1}) 
merge (kbs1)-[:NEXT]->(kbs2) 

merge (kbs1)-[:TEXT]->(kt) 
merge (kbs2)-[:TEXT]->(kt) 

merge (kt)-[:WORDSEQ]->(kbs1) 
merge (kt)-[:WORDSEQ]->(kbs2) 

enter image description here

нетерпеливой труба предотвращает делать периодическую фиксацию, что означает, что полный файл обрабатывается в одном одиночный большой сделка. Так как транзакция должна быть построена в памяти, прежде чем сбрасывать диск на commit, вам нужно иметь достаточно памяти. В большинстве случаев вы этого не делаете, и поэтому JVM может блокироваться и застревать в сборках мусора.

Есть пара сообщений в блоге, посвященных этой теме, например. http://www.markhneedham.com/blog/2014/10/23/neo4j-cypher-avoiding-the-eager/.

Обходной путь состоит в том, чтобы разделить оператор на более мелкие куски, которые не показывают eager, и запускать каждый из них отдельно - что, конечно же, означает, что вы повторяете файл csv несколько раз.

+0

Спасибо за это объяснение - это не то поведение, которое я ожидал бы из производственной системы db - она ​​должна либо делать то, что она должна делать, либо возвращать сообщение об ошибке. :(Мне придется разделить нагрузки на более мелкие файлы. –

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