Hehe powrót do przedszkola normalnie. Ale ten feature jest zajebisty :) ktoś za to powinien dostać 1mln$. Gdyby nie taka wizualizacja to pewnie długo bym siedział przy SQL i jazda jak exel.
Na grafach znam się tyle co teoria w 2 linijkach na sprawdzianie. Natomiast ostatnio podczas rg-dev w Rzeszowie była prelekcja Szymona Warda @maklipsa dotycząca grafów. Fajnie wszystko opowiedział, i widać z pasją i zaangażowaniem, ale z przyczyn filipińskich i późnej pozy to miałem content w głowie ale microservice od analizy informacji już leżał. Jedyne co zwrócił mi. :)
Cola + Ryba => "Cooo...????"
I tak po 2 dniach serwis wstał i zwraca: że te grafy to są błeee, bo gdzie tu not Nulle, gdzie tu spójność, biznes w to z trudem bo do exela będzie trudno. Nie mija 5 min i w tej czasce zaświeciła się lampka: "Przecież to jest jak mapa połączeń". Ha odkrywcze nie ? Normalnie geniusz. W definicji tak pisze. "Ale nieee, nieee, nie ze same połączenia, to jest baza danych gość mówił. To normalnie się JE, to jakiś ma język zapytań na 5 piętrze. To to będzie dobre bo to da się zrobić inaczej joiny.".
No i właśnie do roboty. Szymon mówił o jakimś silniku jak rybka. Neo.... Neo4j. https://neo4j.com/
Powiem tyle. Jest ZajeEEEEEE ty, przez tą wizualizację. To nie to co Młotek do sql'a. aż się chce wpisywać Match (s) return s. Normalnie byle by RAM w chromie starczył bo jednak przy wielu elementach można sobie zaszkodzić.
Import danych
https://neo4j.com/developer/guide-import-csv/
https://neo4j.com/developer/guide-importing-data-and-etl/
Przecież z marszu nie będziemy robić mam jakieś dane odnośnie komunikacji to sobie z SQL wyciągnę. Ale tu jest haczyk. Jak 5 lat romantycznie spędzałeś z SQL, tak teraz ciężko obrobić dwie kochanki i najlepiej całe "żarcie"(dane) dla nowej zrobił byś w kuchni starej dziewczyny. Ehh Ale dobre porównanie, dosłowne. Pierwsze co to zamiast importować to zaczynają się triki, a to może zrobię 2,3..8 joinów 7 subSelect i jazda. GŁUPOTA!
Nowa kochanka to też silnik bazodanowy, mając dane 1:1 w strukturze sql-csv, wystarczy nauczyć rozmawiać w nowym języku.
Pierwszy najważniejszy skrypt:
MATCH (n) DETACH
DELETE n;
Trudno się nie domyślić, jest najlepszy bo za każdym razem puszczamy go ostatni raz. :)
Ale dobra importujemy jeden label(to te kropki-ala tabela po staremu), drugi. - Odcinki drogi (Segment), Przystanki/Punkty docelowe (Pointy)
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///Segment.csv" AS row
CREATE (:Segment {lineNo: toInt(row.lineNo) ,speedLimit: toInt(row.speedLimit),relationSort: toInt(row.relationSort) ,kmFrom : toFloat(row.kmFrom),kmTo : toFloat(row.kmTo)});
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///point.csv" AS row
CREATE (:Point {name: row.nazwa });
O ile Segmenty są maja swoją kolejność i można bardzo łatwo połączyć w jedną linie. A tak naprawdę dla każdej linii można było by zrobić label.
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///tracks2.csv" AS row
MATCH (sta:Segment {lineNo: toInt(row.lineNo),relationSort: toInt(row.relationSort)})
MATCH (stc:Segment {lineNo: sta.lineNo,relationSort: (sta.relationSort+1)})
MERGE (sta)-[:Continue]-(stc);
Ale to to pikuś, problemem w SQL było napisanie takiego skryptu aby segmenty połączyć z Poitami. Udało mi się z innych źródeł złapać informacje jaki Pint(nazwa) na jakim jest km linii(lineNo), i od tego momentu to byłą bajka w połączeniu(ten pierwszy skrypt uruchomiłem 30 razy i taki poszło):
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///pointLocation.csv" AS row
MATCH (p:Point {name: row.nazwa })
MATCH (stc:Segment {lineNo: toInt(row.nr_lini)})
Where toInt(row.km_os) >= toInt(stc.kmFrom) and (toInt(stc.kmTo) > toInt(row.km_os) or toInt(row.km_os) = toInt(stc.kmTo))
MERGE (p)-[:Stay { km: toFloat(row.km_os), lineNo: toInt(row.nr_lini) }]-(stc);
import.done.pl
Znajdź najkrótszą ścieżkę i do domu
Magiczna komenda jaką daje nam silnik i pozamiatane. Nie no co wy, zwróci nam najkrótszą drogę ale po ilości relacji.
MATCH (s:Point),(e:Point),
p = shortestpath((s)-[*]-(e))
WHERE s.name = 'JASŁO' AND e.name = 'RZESZÓW'
return p
Reszta suuuun. bo dziś Dzień kobiet więc "Panowie Zdrowie Pań". BACZNOŚĆ DO OBOWIĄZKÓW.
Panie: Wszystkiego najlepszego.