A legrövidebb útkeresés relációs megközelítése nagyméretű gráfokban Készítette: Morvai Mihály, Szücs Ádám, Verő Anita Cikk szerzője: Jun Gao, Ruoming Jin, Jiashuai Zhou, Jeffrey Xu Yu, Xiao Jiang, Tengjiao Wang Cikk eredeti címe: Relational Approach for Shortest Path Discovery over Large Graphs
Tartalomjegyzék Áttekintés röviden FEM Framework Kétirányú Dijkstra algoritmus SegTable index bevezetése optimalizációhoz
Áttekintés Gráfok hirtelen növekedése → elkerülhetetlen a gráfok lemezen tárolása Relációs FEM framework RDB környezetben Kétirányú Dijkstra algoritmus SegTable index bevezetése optimalizációhoz
Áttekintés Miért van erre szükség? Jelenlegi lemez-alapú technológiák: Drága az eredeti gráf dinamikus módosítása Nem lehet elérni a gráfokat egyszerűen (hiányzó sémák és index mechanizmusok) Hadoop és MapReduce – elosztott fájlrendszereken
Áttekintés RDB – ígéretes infrastruktúra a gráf tárolása, módosítása szempontjából Ezért RDB táblákban tároljuk a gráf és a futási idejű adatokat Ezeken csak korlátozott műveleteket hajthatunk végre Projekció Szelekció Összekapcsolás ...
Áttekintés Két fontos SQL feature-t használunk Window function: Aggregált eredmény Viszont nem csak egy eredmény egy sorhalmazhoz Táblán partíciókat (window) képzünk és az aggregáló fv. eredménye csak ezektől függ Nem tudja helyettesíteni a Group By (teljes tábla) Merge Statement: Forrásból beszúrás, frissítés Lényegében insert, delete, update Végrehajtása gyorsabb, mint a hagyományos DML műveletek
FEM framework
FEM framework Gráfelméleti alapismeretek Sok gráfkereső algoritmus hasonló egymáshoz Pl.: legrövidebb útkeresés – egy csúcsból elérhető-e egy másik Mivel általában nagy a keresési tér, ezért mohó ötleteken alapulnak Ezek a mohó ötletek átültethetők egy általános iteratív feldolgozó struktúrára
FEM framework Legyen A a bejárt csúcsok halmaza, Ak a k. iterációs lépés utáni állapot. Legyen F a határcsúcsok halmaza Legyen E a kiterjesztett csúcsok halmaza
FEM framework
FEM framework – Dijkstra alg.-ra csúcsot megjelölünk d2s és f értékekkel Kezdetben s.d2s = 0 és f = False Ezután elkezdjük az iteratív útkiterjesztést a célcsúcs felé Minden lépésben u csúcs: Minimális d2s és f = False u.f = True, u-t kiterjesztjük, a kapott csúcsokat az eddigi bejárt csúcsokkal egybevonjuk
FEM framework Nem csak select, expand, merge Feladatfüggő operátorok a FEM-ben Ezek műveletigénye viszont elhanyagolható
FEM framework
Kétirányú Dijkstra algoritmus
Kétirányú Diskstra Tipikus optimalizációs lépés a keresési tér csökkentés FEM-ben: a meglátogatott csúcsok számának minimalizálása Ehhez a kétirányú Dijkstra alg.-ot ültetjük FEM-be Csökkenti F-, E- és M-operátorok számolási költségeit
Kétirányú Diskstra Megpróbál sok adatot vizsgálni, a keresési teret redukálni Az utat megtalálhatjuk a startból (s) és célból (t) egyaránt Kiválasztásnál nem csak egy csúcs Ez „RDB-barát” több csúcs egy művelet elvégzése alatt így kisebb I/O költség az egyes csúcsokra
Kétirányú Diskstra Kezdetben azok a határcsúcsok kerülnek kiválasztásra, ahol d2s = mind2s és f = False Szükség van d2t és b adatokra is a csúcsokhoz Kiválasztunk t csúcs felől is Abba az irányba terjesztünk ki, amelyik irányba kevesebb határcsúcs van Hogyan terminál az algritmus?
Kétirányú Diskstra Vezessük be lf és lb változókat A minCost a legrövidebb távolság s és t között Legrövidebb: minCost lf + lb Nálunk: MinCost a min. d2s és d2t összege lf a min. d2s lb a min. d2t Ezekkel eldönthető, hogy terminál vagy sem
SegTable index bevezetése optimalizációhoz
SegTable index bevezetése Az előbbi algoritmus csúcshalmazokon megy végig A műveletek száma még mindig nagy, bár csökkent Bevezetjük a SegTable indexet Megőrzi az előre kiszámított legrövidebb szakaszokat Ezeket felhasználjuk részcsúcsok kiválasztásához, jövőbeni kiterjesztésekhez Ezzel próbáljuk csökkenteni az iterációk számát a keresési tér minimális növekedésével
SegTable index bevezetése Legrövidebb szakaszok? Kisebb súlyú élek, nagyobb esély Egy adott küszöbnél nem hosszabb távolságú „legrövidebb” szakaszokat kiszámolhatjuk Ezeket tároljuk el a SegTable táblában Tehát a SegTable valójában a legrövidebb részút indexe Ezeknek a szakaszoknak nagyobb az esélye bent lenni a legrövidebb útban
SegTable index bevezetése Szelektív útvonal kiterjesztés: a SegTable szakaszai alapján válasszunk ki csúcsokat kiterjesztésre Beépítjük a kétirányú Dijkstra algoritmusba Műveletigénye legfeljebb olyan lesz, mint a korábbi algoritmusé Viszont a keresési tér növekszik, mérete függ a küszöbtől
Részletesebb leírást, eredményeket a cikkben olvashattok! Köszönöm a figyelmet! Részletesebb leírást, eredményeket a cikkben olvashattok!