top of page
  • Szerző képeZsolt Molnár

Kell neked gráf adatbázis?

Ha már ezt a kérdést feltetted, akkor a válasz eséllyel igen 🙂 Na de mi is az a gráf adatbázis, juthat eszünkbe, vesézzük ki pár mondatban.



A gráf adatbázisok, illetve a bennük tárolt tudás gráfok úgy modellezik le a valóságot egy szoftver rendszerbe, ahogy az emberi agy gondolkodik. Úgy is tárolják, úgy is keresik. Ha pl elmegyünk egy étterembe, és meg akarjuk tudni, hogy egy több szintű termék kategóriában melyek azok a termékek, amelyek hamburgerek (tehát ilyen a termék kategória: hamburgerek - sajtburgerek - trappistás burgerek - húsos trappistás burgerek, ésatöbbi), akkor pl SQL-ban egy exponenciálisan növekvő ilyen lekérést kell használnod (elnézést a magyar nevekért, természetesen a valóságban egy ilyen elnevezési sémáért azonnali kézletörés jár):

SELECT p.Terméknév 
FROM Termék AS p 
JOIN TermékKategória pc ON (p.KategóriaAzonosító = pc.KategóriaAzonosító AND pc.kategóriaNév = "hamburgerek")

JOIN TermékKategória pc1 ON (p.KategóriaAzonosító = pc1.KategóriaAzonosító JOIN TermékKategória pc2 ON (pc2.szülőKatagóriaAzonosító = pc2.KategóriaAzonosító AND pc2.kategóriaNév = "hamburgerek")  

JOIN TermékKategória pc3 ON (p.KategóriaAzonosító = pc3.KategóriaAzonosító JOIN TermékKategória pc4 ON (pc3.szülőKatagóriaAzonosító = pc4.KategóriaAzonosító) JOIN TermékKategória pc5 ON (pc4.szülőKatagóriaAzonosító = pc5.KategóriaAzonosító AND pc5.kategóriaNév = "hamburgerek") 

🤔 🤓 Előre tudnod kell, hány szinten akarsz lekérdezni, és meg kell konstruálnod a fenti queryt. Ezzel szemben egy gráf adatbázis ennyiből megoldja:

MATCH (p:Termék)-[:KATEGÓRIA]->(l:TermékKategória)-[:FELSŐBB_KATEGÓRIA*0..]-(:TermékKategória {kategóriaNév:"hamburger}) RETURN p.kategóriaNév

😎 És ez tetszőleges szinten tudja! Ha tehát a trappistás húsos hamburgerek alá bevezetsz még egy kategóriát (trappistás csirkehúsos hamburgerek), akkor a fenti query változtatás nélkül meg fogja találni az összes hamburgert.


Tehát mikor kell neked gráf adatbázis? Akkor, ha az alábbi kérdések bármelyikére igen a válasz:

  • gyakran változhatnak az adat modelljeid, ahogy változik a vállalkozásod, és ehhez nagyon gyorsan kell adaptálódnod?

  • Több forrásból, "táblából" kell összekombinálni adatokat egy egyedi nézetbe?

  • Több adatforrásból ("táblából") kell keresned szimultán, az egyes táblák adatait az egyes al-keresésekben felhasználva?

Persze óvatosnak kell lenni, nem minden esetben működnek optimálisan a gráfok, ezért mindig analizáld előzetesen, mit akarsz megalkotni. De a következőkben elég nagy eséllyel komoly előnyre tehetsz szert, ha gráfokat használsz hagyományos megoldásokkal szemben:

  • web áruházak, vendéglátás, stb, ahol hierarchikusan épülnek fel a termékek, rengeteg kapcsolódással (megrendelő, megrendelés, termék kategóriák, stb.)

  • valamilyen üzleti hierarchia lemodellezése (több szintű franchise, ügyfelekkel, hozzáférésekkel, adminisztrátorokkal, stb.)

  • és a fentieket analizálni akarod, termék ajánló rendszert akarsz beépíteni, stb

  • túrák :)

Ez utóbbit azért tettem ide, mert a Garlic Tech egy saját projektjét, ami túrákkal lenne kapcsolatos, gráf alapokra helyeztem nemrég, pontosan azért, mert egyre komplexebb kérdések merültek fel, amikre a hagyományos rendszerben nagyon nehéz volt válaszokat találni. Sőt, eljutottam arra a pontra, amikor a haladás a projekt rendelkezésére álló extrém szűk erőforrások miatt olyan szintre lassult, hogy gyakorlatilag a fejlesztés hónapokra le is állt. Ill nem állt le, csak nem volt érzékelhető haladás... Miután a cuccot nagy levegővétellel gráf alapokra helyeztem, szinte elszédültem:

  • a rendszer teljesítménye látványosan nőtt, hiszen a gráf egy query-ben adott villámgyors válaszokat olyan kérdésekre, amiket eddig kódban kellett megoldani, több lekéréssel, backenden, frontenden, tehát nagy fejlesztési igénye volt

  • új távlatok nyíltak meg, hiszen a tudás gráfban meglévő kapcsolatok új lehetőségeket is sugallnak (még egyszer, követik az emberi agyat - azaz "felismerések" is jöhetnek, ahogy nőnek a kapcsolatok. Voltak is ilyen felismerések 😃)

  • a projekt megint levegőre kapott, és még soha sem haladt ilyen stabilan, pedig alig tudok vele foglalkozni

Egy későbbi postban adok a fentire egy esettanulmányt. Menő lesz! 😎


... és akkor mit használok: a fantasztikus, és ingyenes neo4j rendszert, örök hála a készítőknek: https://neo4j.com/





89 megtekintés0 hozzászólás
bottom of page