AUTOMATATANULÁS ALGORITMUSA
Háromművelet ismétlése
o Split: Inkonzisztens állapotok szétválasztása
o Merge: Hasonló állapotok összevonása
-
-
b
+
+
a
a
-b
+
+
a
a
-b +
a
17.
AUTOMATATANULÁS ALGORITMUSA
Háromművelet ismétlése
o Split: Inkonzisztens állapotok szétválasztása
o Merge: Hasonló állapotok összevonása
o Color: Állapot véglegesítése
18.
AUTOMATATANULÁS ALGORITMUSA
Háromművelet ismétlése
o Split: Inkonzisztens állapotok szétválasztása
o Merge: Hasonló állapotok összevonása
o Color: Állapot véglegesítése
Művelet kiválasztása: metrika
o A művelet eredménye alapján
Művelet kiválasztása
Split
végrehajtása
Merge
végrehajtása
Color
végrehajtása
ÉRDEKES LEKÉRDEZÉSEK
Sokszorhasznált WHERE NOT
Merge
o Összevonandó állapotok tranzitív lezártja
Split: kategóriasorolás/részfamásolás
o Merge miatt több origNext él is lehet
o Melyik alapján soroljunk kategóriába?
21.
WHERE NOT «MINTA»
Útvonal végének megtalálása
WHERE NOT (v)-[:NEXT]->()
:NEXT :NEXT
… …v :NEXT
22.
WHERE NOT «MINTA»
Útvonal végének megtalálása
WHERE NOT (v)-[:NEXT]->()
:NEXT :NEXT
… …v :NEXT
23.
WHERE NOT «MINTA»
Útvonal végének megtalálása
Útvonal elejének megtalálása
WHERE NOT (v)-[:NEXT]->()
WHERE NOT ()-[:NEXT]->(root)
:NEXT :NEXT
… …:NEXT
root
24.
WHERE NOT «MINTA»
Útvonal végének megtalálása
Útvonal elejének megtalálása
WHERE NOT (v)-[:NEXT]->()
WHERE NOT ()-[:NEXT]->(root)
:NEXT :NEXT
… …:NEXT
root
MERGE +
-
:indexPair
:indexPair
Probléma
oNem érzékel inkonzisztenciát
Megoldás
o Tranzitív lezárt
:indexPair
:indexPair
+
-:NEXT
:NEXT
while (driver.run(createIndexPairs, mergeMap))
28.
MERGE +
-
:indexPair
:indexPair
Probléma
oNem érzékel inkonzisztenciát
Megoldás
o Tranzitív lezárt
:indexPair
:indexPair
+
-:NEXT
:NEXT
MATCH (s1:IndexedMerge)-[:IndexPair*..]-(s2:IndexedMerge),
s1p = (s1)-[:NEXT*0..]->(s12:State), s2p = (s2)-[:NEXT*0..]->(s22:State)
WHERE id(s1) > id(s2) AND length(s1p) = length(s2p)
AND NOT (s12)-[:IndexPair*0..]-(s22)
WITH s12, s22, s1p, s2p,[s1r IN rels(s1p) | s1r.symbol] AS s1ss, [s2r IN rels(s2p) | s2r.symbol] AS s2ss,
[s1r IN rels(s1p) | s1r.Tmin] AS s1mins, [s2r IN rels(s2p) | s2r.Tmin ] AS s2mins,
[s1r IN rels(s1p) | s1r.Tmax] AS s1maxs, [s2r IN rels(s2p) | s2r.Tmax ] AS s2maxs
WHERE s1ss = s2ss AND s1mins = s2mins AND s1maxs = s2maxs
WITH collect([s12, s22]) as pairs
MATCH ()-[ip:IndexPair]->()
WITH max(ip.index) + 1 as nextIndex, pairs
UNWIND range(0, length(pairs)-1) as idx
WITH pairs[idx][0] as s12, pairs[idx][1] as s22, idx + nextIndex as edgeIndex
CREATE (s12)-[:IndexPair {index: edgeIndex}]->(s22)
SET s12:IndexedMerge, s22:IndexedMerge
while (driver.run(createIndexPairs, mergeMap))
MERGE
MATCH (s1:IndexedMerge)-[:IndexPair*]-(s2:IndexedMerge),
s1p =(s1)-[:NEXT*0..]->(s12:State),
s2p = (s2)-[:NEXT*0..]->(s22:State)
WHERE id(s1) > id(s2) AND length(s1p) = length(s2p)
AND NOT (s12)-[:IndexPair*0..]-(s22)
+
-
:indexPair
:indexPair
:indexPair
:indexPair
+
-:NEXT
:NEXT
Probléma
o Nem érzékel inkonzisztenciát
Megoldás
o Tranzitív lezárt
31.
MERGE
MATCH (s1:IndexedMerge)-[:IndexPair*]-(s2:IndexedMerge),
s1p =(s1)-[:NEXT*0..]->(s12:State),
s2p = (s2)-[:NEXT*0..]->(s22:State)
WHERE id(s1) > id(s2) AND length(s1p) = length(s2p)
AND NOT (s12)-[:IndexPair*0..]-(s22)
+
-
:indexPair
:indexPair
:indexPair
:indexPair
+
-:NEXT
:NEXT
Probléma
o Nem érzékel inkonzisztenciát
Megoldás
o Tranzitív lezárt
Ellenőrzés szempontjából
kritikus állapotpárok
32.
MERGE
MATCH (s1:IndexedMerge)-[:IndexPair*]-(s2:IndexedMerge),
s1p =(s1)-[:NEXT*0..]->(s12:State),
s2p = (s2)-[:NEXT*0..]->(s22:State)
WHERE id(s1) > id(s2) AND length(s1p) = length(s2p)
AND NOT (s12)-[:IndexPair*0..]-(s22)
+
-
:indexPair
:indexPair
:indexPair
:indexPair
+
-:NEXT
:NEXT
Probléma
o Nem érzékel inkonzisztenciát
Megoldás
o Tranzitív lezárt
s1 s1
s2 s2
Ellenőrzés szempontjából
kritikus állapotpárok
33.
MERGE
MATCH (s1:IndexedMerge)-[:IndexPair*]-(s2:IndexedMerge),
s1p =(s1)-[:NEXT*0..]->(s12:State),
s2p = (s2)-[:NEXT*0..]->(s22:State)
WHERE id(s1) > id(s2) AND length(s1p) = length(s2p)
AND NOT (s12)-[:IndexPair*0..]-(s22)
+
-
:indexPair
:indexPair
:indexPair
:indexPair
+
-:NEXT
:NEXT
Probléma
o Nem érzékel inkonzisztenciát
Megoldás
o Tranzitív lezárt
s1 s1
s2 s2
WITH s12, s22, s1p, s2p,
[s1r IN rels(s1p) | s1r.symbol] AS s1ss, [s2r IN rels(s2p) | s2r.symbol] AS s2ss,
[s1r IN rels(s1p) | s1r.Tmin] AS s1mins, [s2r IN rels(s2p) | s2r.Tmin ] AS s2mins,
[s1r IN rels(s1p) | s1r.Tmax] AS s1maxs, [s2r IN rels(s2p) | s2r.Tmax ] AS s2maxs
WHERE s1ss = s2ss AND s1mins = s2mins AND s1maxs = s2maxs
...
Ellenőrzés szempontjából
kritikus állapotpárok
34.
MERGE
MATCH (s1:IndexedMerge)-[:IndexPair*]-(s2:IndexedMerge),
s1p =(s1)-[:NEXT*0..]->(s12:State),
s2p = (s2)-[:NEXT*0..]->(s22:State)
WHERE id(s1) > id(s2) AND length(s1p) = length(s2p)
AND NOT (s12)-[:IndexPair*0..]-(s22)
+
-
:indexPair
:indexPair
:indexPair
:indexPair
+
-:NEXT
:NEXT
Probléma
o Nem érzékel inkonzisztenciát
Megoldás
o Tranzitív lezárt
s1 s1
s2 s2
WITH s12, s22, s1p, s2p,
[s1r IN rels(s1p) | s1r.symbol] AS s1ss, [s2r IN rels(s2p) | s2r.symbol] AS s2ss,
[s1r IN rels(s1p) | s1r.Tmin] AS s1mins, [s2r IN rels(s2p) | s2r.Tmin ] AS s2mins,
[s1r IN rels(s1p) | s1r.Tmax] AS s1maxs, [s2r IN rels(s2p) | s2r.Tmax ] AS s2maxs
WHERE s1ss = s2ss AND s1mins = s2mins AND s1maxs = s2maxs
...
• Ugyan olyan hosszú útvonal
• Ugyan olyan események
• Stb.
Ellenőrzés szempontjából
kritikus állapotpárok
35.
MERGE
Probléma
o Nemérzékel inkonzisztenciát
Megoldás
o Tranzitív lezárt
+
-
:indexPair
:indexPair
:indexPair
:indexPair
+
-:NEXT
:NEXTs1 s1
s2 s2
36.
MERGE
CREATE (s12)-[:IndexPair {index:edgeIndex}]->(s22)
SET s12:IndexedMerge, s22:IndexedMerge
Probléma
o Nem érzékel inkonzisztenciát
Megoldás
o Tranzitív lezárt
+
-
:indexPair
:indexPair
:indexPair
:indexPair
+
-:NEXT
:NEXTs1 s1
s2 s2
37.
MERGE
CREATE (s12)-[:IndexPair {index:edgeIndex}]->(s22)
SET s12:IndexedMerge, s22:IndexedMerge
Probléma
o Nem érzékel inkonzisztenciát
Megoldás
o Tranzitív lezárt
+
-
:indexPair
:indexPair
:indexPair
:indexPair
+
-:NEXT
:NEXTs1 s1
s2 s2
Új megtalált indexpárok
megjelölése
38.
MERGE
CREATE (s12)-[:IndexPair {index:edgeIndex}]->(s22)
SET s12:IndexedMerge, s22:IndexedMerge
Probléma
o Nem érzékel inkonzisztenciát
Megoldás
o Tranzitív lezárt
+
-
:indexPair
:indexPair
:indexPair
:indexPair
+
-:NEXT
:NEXTs1 s1
s2 s2
:indexPair :indexPair
Új megtalált indexpárok
megjelölése
39.
MERGE
CREATE (s12)-[:IndexPair {index:edgeIndex}]->(s22)
SET s12:IndexedMerge, s22:IndexedMerge
Probléma
o Nem érzékel inkonzisztenciát
Megoldás
o Tranzitív lezárt
+
-
:indexPair
:indexPair
:indexPair
:indexPair
+
-:NEXT
:NEXTs1 s1
s2 s2
:indexPair :indexPair
Új megtalált indexpárok
megjelölése
while (driver.run(createIndexPairs, mergeMap))
40.
MERGE
CREATE (s12)-[:IndexPair {index:edgeIndex}]->(s22)
SET s12:IndexedMerge, s22:IndexedMerge
Probléma
o Nem érzékel inkonzisztenciát
Megoldás
o Tranzitív lezárt
+
-
:indexPair
:indexPair
:indexPair
:indexPair
+
-:NEXT
:NEXTs1 s1
s2 s2
:indexPair :indexPair
Új megtalált indexpárok
megjelölése
while (driver.run(createIndexPairs, mergeMap))
Java kódból hívva
ciklikusan
41.
MERGE
CREATE (s12)-[:IndexPair {index:edgeIndex}]->(s22)
SET s12:IndexedMerge, s22:IndexedMerge
Probléma
o Nem érzékel inkonzisztenciát
Megoldás
o Tranzitív lezárt
+
-
:indexPair
:indexPair
:indexPair
:indexPair
+
-:NEXT
:NEXTs1 s1
s2 s2
:indexPair :indexPair
Új megtalált indexpárok
megjelölése
while (driver.run(createIndexPairs, mergeMap))
Java kódból hívva
ciklikusan
SPLIT
Szétválasztás
o Egyélet szétvág
o Időpont alapján: 5
• Eredeti átmeneten
o Két végpont
• Kisebb: < t
• Nagyobb: ≥ t
o Eredmény
[1,4]
[5,6]
+
-
45.
SPLIT
Probléma
o acsúcs összevonás eredménye
o b csúcsból újragenerált részfa
• Nagyobb részfába 6 miatt
• Kisebb részfába 1 miatt
:Origin
:Origin :Origin
[1,6]
1
6
b
6
:Origin :Origin
…
a
46.
Megoldás
o „Legrövidebb”úton elérve a-t
o Utolsó szám alapján: 6
SPLIT
:Origin
:Origin :Origin
[1,6]
1
6
b
6
:Origin :Origin
…
MATCH (r:Red)-[n:NEXT]->(b:Blue)
WITH r, b, n.Tmax as Tmax, n.Tmin as
Tmin, n.symbol as symbol
UNWIND range(Tmin, Tmax-1) AS t
MATCH (b)-[:NEXT*0..]->(s1:State)-
[:Origin]->(so1:OrigState),
trace1=(so1)<-[OrigNext*0..]-
(redOrigNext:OrigState), (redOrigNext)<-
[no1:OrigNext]-(redOrig:OrigState)<-
[:Origin]-(r)
WHERE none(x IN nodes(trace1) WHERE
(x)<-[:Origin]-(r))
WITH r, b, t, Tmin, Tmax, symbol, s1,
no1, so1
a
47.
Megoldás
o „Legrövidebb”úton elérve a-t
o Utolsó szám alapján: 6
SPLIT
:Origin
:Origin :Origin
[1,6]
1
6
b
6
:Origin :Origin
…
MATCH (b)-[:NEXT*0..]->(s1:State)-
[:Origin]->(so1:OrigState),
trace1=(so1)<-[OrigNext*0..]-
(redOrigNext:OrigState), (redOrigNext)<-
[no1:OrigNext]-(redOrig:OrigState)<-
[:Origin]-(r)
WHERE none(x IN nodes(trace1) WHERE
(x)<-[:Origin]-(r)) AND
toInteger(no1.time)>t
WITH r, b, t, metric, Tmin, Tmax,
symbol, collect(so1) as so1s
MATCH (b)-[:NEXT*0..]->(s2:State)-
[:Origin]->(so2:OrigState),
trace2=(so2)<-[OrigNext*0..]-
(redOrigNext:OrigState), (redOrigNext)<-
[no2:OrigNext]-(redOrig:OrigState)<-
[:Origin]-(r)
WHERE none(x IN nodes(trace2) WHERE
(x)<-[:Origin]-(r)) AND
toInteger(no2.time)<=t
RETURN r, b, t, metric, Tmin, Tmax,
symbol, so1s, collect(so2) as so2s
a
48.
SPLIT
:Origin
:Origin :Origin
[1,6]
1
6
6
:Origin :Origin
…
as2
ao
an
b
Megoldás
o „Legrövidebb” úton elérve a-t
o Utolsó szám alapján: 6
MATCH
(a)-[:NEXT*0..]->(s2:State)-[:Origin]->(b:OrigState),
trace=(b)<-[OrigNext*0..]-(an:OrigState),
(an)<-[no:OrigNext]-(ao:OrigState)<-[:Origin]-(a)
Szétvágandó él az
eredeti lefutásokban
49.
SPLIT
Szétvágandó él az
eredetilefutásokban
:Origin
:Origin :Origin
[1,6]
1
6
6
:Origin :Origin
…ao
a
an
s2
b
MATCH
(a)-[:NEXT*0..]->(s2:State)-[:Origin]->(b:OrigState),
trace=(b)<-[OrigNext*0..]-(an:OrigState),
(an)<-[no:OrigNext]-(ao:OrigState)<-[:Origin]-(a)
Megoldás
o „Legrövidebb” úton elérve a-t
o Utolsó szám alapján: 6
50.
SPLIT
WHERE none(x INnodes(trace) WHERE (x)<-[:Origin]-(a))
Legrövidebb lehetséges út
keresése, olyan node, amiből
csak közvetlenül lehet elérni
az „a” csúcsot.
Megoldás
o „Legrövidebb” úton elérve a-t
o Utolsó szám alapján: 6
:Origin
:Origin :Origin
[1,6]
1
6
6
:Origin :Origin
…
a s2
ao
b
an
MATCH
(a)-[:NEXT*0..]->(s2:State)-[:Origin]->(b:OrigState),
trace=(b)<-[OrigNext*0..]-(an:OrigState),
(an)<-[no:OrigNext]-(ao:OrigState)<-[:Origin]-(a)
Vizualizáció
Adatmodellkönnyen fejleszthető
o Új címkék, tulajdonságok, csúcsok
o Nem kell sémát definiálni előre
NEO4J ELŐNYEI
54.
Vizualizáció
Adatmodellkönnyen fejleszthető
o Új címkék, tulajdonságok, csúcsok
o Nem kell sémát definiálni előre
Gráfműveletek magasszintű leírása Cypher nyelven
NEO4J ELŐNYEI
TÖBB LEKÉRDEZÉS ÖSSZEFŰZÉSE
MATCH(node:Blue)
REMOVE node:Blue
SET node:Red
RETURN *
node
:Red {prop1: "val1"}
:Red {prop1: "val2"}
MATCH (node:Blue)
REMOVE node:Blue
SET node:Red
WITH 1 AS dummy
RETURN *
dummy
1
1
68.
TÖBB LEKÉRDEZÉS ÖSSZEFŰZÉSE
MATCH(node:Blue)
REMOVE node:Blue
SET node:Red
RETURN *
node
:Red {prop1: "val1"}
:Red {prop1: "val2"}
MATCH (node:Blue)
REMOVE node:Blue
SET node:Red
WITH 1 AS dummy
RETURN *
dummy
1
1
MATCH (node:Blue)
REMOVE node:Blue
SET node:Red
WITH 1 AS dummy
MATCH (n)
RETURN *
node dummy
:Red {prop1: "val1"} 1
:Red {prop1: "val2"} 1
:Green {value: 13} 1
:Red {prop1: "val1"} 1
:Red {prop1: "val2"} 1
:Green {value: 13} 1
69.
TÖBB LEKÉRDEZÉS ÖSSZEFŰZÉSE
MATCH(node:Blue)
REMOVE node:Blue
SET node:Red
RETURN *
node
:Red {prop1: "val1"}
:Red {prop1: "val2"}
MATCH (node:Blue)
REMOVE node:Blue
SET node:Red
WITH 1 AS dummy
RETURN *
dummy
1
1
MATCH (node:Blue)
REMOVE node:Blue
SET node:Red
WITH 1 AS dummy
MATCH (n)
RETURN *
node dummy
:Red {prop1: "val1"} 1
:Red {prop1: "val2"} 1
:Green {value: 13} 1
:Red {prop1: "val1"} 1
:Red {prop1: "val2"} 1
:Green {value: 13} 1
Descartes-szorzat
minden sor
kétszer jelenik meg
70.
TÖBB LEKÉRDEZÉS ÖSSZEFŰZÉSE
MATCH(node:Blue)
REMOVE node:Blue
SET node:Red
RETURN *
node
:Red {prop1: "val1"}
:Red {prop1: "val2"}
MATCH (node:Blue)
REMOVE node:Blue
SET node:Red
WITH count(*) as dummy
RETURN *
dummy
2
71.
TÖBB LEKÉRDEZÉS ÖSSZEFŰZÉSE
MATCH(node:Blue)
REMOVE node:Blue
SET node:Red
RETURN *
node
:Red {prop1: "val1"}
:Red {prop1: "val2"}
MATCH (node:Blue)
REMOVE node:Blue
SET node:Red
WITH count(*) as dummy
RETURN *
dummy
2
MATCH (node:Blue)
REMOVE node:Blue
SET node:Red
WITH count(*) as dummy
MATCH (n)
RETURN *
node dummy
:Red {prop1: "val1"} 2
:Red {prop1: "val2"} 2
:Green {value: 13} 2
72.
TÖBB LEKÉRDEZÉS ÖSSZEFŰZÉSE
MATCH(node:Blue)
REMOVE node:Blue
SET node:Red
RETURN *
node
:Red {prop1: "val1"}
:Red {prop1: "val2"}
MATCH (node:Blue)
REMOVE node:Blue
SET node:Red
WITH count(*) as dummy
RETURN *
dummy
2
MATCH (node:Blue)
REMOVE node:Blue
SET node:Red
WITH count(*) as dummy
MATCH (n)
RETURN *
node dummy
:Red {prop1: "val1"} 2
:Red {prop1: "val2"} 2
:Green {value: 13} 2
Pontosan 1 sor
eredmény
második lekérdezésben
nem lesz ismétlődés
LEKÉRDEZÉSEK FUTTATÁSA
Információátadása lekérdezések között?
Csúcs címkézése
Új csúcs ideiglenes információval
Embedded használat esetén
eredmény továbbadása paraméterként
91.
LEKÉRDEZÉSEK FUTTATÁSA
Információátadása lekérdezések között?
Csúcs címkézése
Új csúcs ideiglenes információval
Embedded használat esetén
eredmény továbbadása paraméterként
redNode num
:Red {prop1: "val1"} 1
92.
LEKÉRDEZÉSEK FUTTATÁSA
Információátadása lekérdezések között?
Csúcs címkézése
Új csúcs ideiglenes információval
Embedded használat esetén
eredmény továbbadása paraméterként
redNode num
:Red {prop1: "val1"} 1
Pontosan 1 sor
eredmény
93.
LEKÉRDEZÉSEK FUTTATÁSA
Információátadása lekérdezések között?
Csúcs címkézése
Új csúcs ideiglenes információval
Embedded használat esetén
eredmény továbbadása paraméterként
redNode num
:Red {prop1: "val1"} 1
WITH $redNode AS redNode
MATCH (g:Green {num: $num})
CREATE (redNode)-[:Edge]->(g)
Pontosan 1 sor
eredmény
94.
CIKLUS
Sok „ciklusjellegű” probléma megoldható listákkal:
o List comprehension [x IN xs WHERE condition | f(x)]
o Reduce: reduce(acc = "", x IN list | acc + x.prop)
95.
CIKLUS
Sok „ciklusjellegű” probléma megoldható listákkal:
o List comprehension [x IN xs WHERE condition | f(x)]
o Reduce: reduce(acc = "", x IN list | acc + x.prop)
De ciklusra szükség lehet
o Java kódból lekérdezések futtatása
while (gds.execute(conditionQuery).hasNext()) {
gds.execute(step1Query);
gds.execute(step2Query);
}
96.
CIKLUS
Sok „ciklusjellegű” probléma megoldható listákkal:
o List comprehension [x IN xs WHERE condition | f(x)]
o Reduce: reduce(acc = "", x IN list | acc + x.prop)
De ciklusra szükség lehet
o Java kódból lekérdezések futtatása
o Ciklusfeltétel az eredmény sorainak száma alapján
while (gds.execute(conditionQuery).hasNext()) {
gds.execute(step1Query);
gds.execute(step2Query);
}
IMPORT-EXPORT
Algoritmus állapotánakelmentése
APOC* GraphML import-export
*Awesome Procedures on Cypher
// save
CALL apoc.export.graphml.all('my.graphml',
{storeNodeIds:true, readLabels:true, useTypes:true})
100.
IMPORT-EXPORT
Algoritmus állapotánakelmentése
APOC* GraphML import-export
*Awesome Procedures on Cypher
// save
CALL apoc.export.graphml.all('my.graphml',
{storeNodeIds:true, readLabels:true, useTypes:true})
// load
MATCH (n) // delete all
DETACH DELETE n
WITH count(*) AS dummy //-----------------
CALL apoc.import.graphml('my.graphml',
{storeNodeIds:true, readLabels:true, useTypes:true})
YIELD nodes, relationships
WITH count(*) AS dummy //-----------------
MATCH (n) RETURN n // show all
VISSZALÉPÉSES KERESÉS (BACKTRACKING)
Ha vissza kell tudni állni egy korábbi állapotra
és onnan folytatni
Megoldások:
o Import-export
?
Metrika: 5 12 8
108.
VISSZALÉPÉSES KERESÉS (BACKTRACKING)
Ha vissza kell tudni állni egy korábbi állapotra
és onnan folytatni
Megoldások:
o Import-export
o Tranzakció meghiúsulása
• Csak egy szintű visszalépésre
?
Metrika: 5 12 8
HIBAKERESÉS
Futtatás soránállapotok rögzítése és visszajátszása
o Visszajátszásnál előző állapot külön csúcsban tárolva
111.
HIBAKERESÉS
Futtatás soránállapotok rögzítése és visszajátszása
o Visszajátszásnál előző állapot külön csúcsban tárolva
o Mentett lekérdezés a léptetésre
112.
HIBAKERESÉS
Futtatás soránállapotok rögzítése és visszajátszása
o Visszajátszásnál előző állapot külön csúcsban tárolva
o Mentett lekérdezés a léptetésre
HIBAKERESÉS
Bonyolult hibáknál
oHibamintát Cypherben felírni
o Kódban breakpoint, ha megtalálta
MATCH (node:Faulty)
RETURN node
if (gds.execute(query).hasNext())
// breakpoint
116.
HIBAKERESÉS
Bonyolult hibáknál
oHibamintát Cypherben felírni
o Kódban breakpoint, ha megtalálta
o Adott állapot betöltése
o Léptetés az állapotok között
MATCH (node:Faulty)
RETURN node
if (gds.execute(query).hasNext())
// breakpoint
TDK ÉS SZAKDOLGOZATOK
GujgiczerAnna:
Időzített rendszerek tanulás alapú analízise.
BSc szakdolgozat
Elekes Márton:
Modellvezérelt automatatanulás.
BSc szakdolgozat
Elekes Márton, Gujgiczer Anna:
Modellalapú automatatanulás formális modellek szintéziséhez.
TDK dolgozat
127.
A CYPHER KIFEJEZŐEREJE
A legtöbb lekérdezés P-beli
Két diszjunkt útvonal létezésének ellenőrzése már NP-teljes
A Cypher nyelv Turing-teljes
o Listanézetek, reduce
o A gráf szalagként használható
Cypher 9 (aktuális verzió)
Cypher 10 (multiple graph-ok támogatása)
128.
ÖSSZEFOGLALÁS
Neo4j prototípus
oGyors fejlesztés
o Specifikus problémákra APOC eljárások
Felmerülő problémák
o APOC bug
o Megjelenítőfelület hiányosságai
o Fixpont hiánya
Javasolt felhasználás
o Prototipizálás
o Utána újraírni imperatív kóddal
KÖSZÖNETNYILVÁNÍTÁS
Az EmberiErőforrások Minisztériuma ÚNKP-17-1-I. kódszámú
Új Nemzeti Kiválóság Programjának támogatásával készült
Az MTA-BME Lendület Kiberfizikai Rendszerek Kutatócsoport
szakmai támogatásával készült