Programavimas

„TigerGraph“: paaiškinta lygiagrečių grafų duomenų bazė

Viktoras Lee yra „TigerGraph“ produktų valdymo direktorius.

Grafikų duomenų bazės puikiai atsako į sudėtingus klausimus apie santykius dideliuose duomenų rinkiniuose. Bet jie atsitrenkia į sieną - tiek atlikimo, tiek analizės galimybių požiūriu - kai duomenų apimtis auga labai didelė ir kai atsakymai turi būti pateikti realiu laiku.

Taip yra dėl to, kad esamos grafikų technologijos turi problemų realiuoju laiku įkeliant didelius duomenų kiekius arba greitai gaunant duomenis. Jie taip pat stengiasi pasiekti greitą greitį. Nors norint atlikti gilesnę analizę reikia giliau pereiti grafiką, šiandienos grafo duomenų bazės paprastai sulėtėja arba pasibaigia laikas po dviejų apynių.

„TigerGraph“ yra paskirstyta vietinė grafikų skaičiavimo platforma, sukurta siekiant apeiti šiuos apribojimus. „TigerGraph“ vietinės lygiagrečios diagramos architektūra ir realaus laiko giliųjų nuorodų analizė siekia suteikti šiuos pranašumus:

  • Greitesnis duomenų įkėlimas, kad būtų galima greitai sukurti grafikus
  • Greitesnis lygiagrečių grafų algoritmų vykdymas
  • Realaus laiko galimybė perduoti naujinius ir įdėklus naudojant REST
  • Galimybė suvienodinti realaus laiko analizę naudojant plataus masto duomenų apdorojimą neprisijungus
  • Galimybė išplėsti ir išplėsti paskirstytų programų galimybes

Tolesniuose skyriuose trumpai apžvelgsime, kaip veikia diagramų apdorojimas, ištirsime giliųjų nuorodų analizės pranašumus ir pakelsime „TigerGraph“ gaubtą, kad suprastume, kaip jis gali teikti giliųjų nuorodų analizę realiuoju laiku.

Grafiko perėjimas: daugiau apynių, daugiau įžvalgų

Kodėl reikalinga giliųjų nuorodų analizė? Nes kuo daugiau nuorodų galite pereiti (apynių) grafike, tuo didesnę įžvalgą pasiekiate. Apsvarstykite hibridines žinias ir socialinius grafikus. Kiekvienas mazgas jungiasi prie tu žinai ir PSO tu žinai. Tiesioginės nuorodos (vienas apynis) atskleidžia tai, ką žinote. Du apyniai atskleidžia viską, ką žino jūsų draugai ir pažįstami. Trys apyniai? Jūs esate kelyje, kad atskleistumėte ką Visi žino.

Grafiko pranašumas yra duomenų rinkinio duomenų subjektų santykių žinojimas, kuris yra žinių atradimo, modeliavimo ir numatymo esmė. Kiekvienas apynis gali sukelti eksponentinį jungčių skaičiaus ir, atitinkamai, žinių kiekio augimą. Tačiau jame slypi technologinė kliūtis. Tik sistema, efektyviai ir lygiagrečiai atliekanti apynius, gali pateikti giluminių ryšių (kelių apynių) analizę realiuoju laiku.

Paprastas pavyzdys, pvz., Realiuoju laiku suasmeninta rekomendacija, atskleidžia kelių nuorodų schemoje vertę ir galią:

„Klientai, kuriems patiko tai, kas jums patiko, taip pat pirko šias prekes.“

Tai reiškia trijų apynių užklausą:

  1. Pradėdami nuo asmens (jūs), nustatykite daiktus, kuriuos peržiūrėjote / patiko / nusipirko.
  2. Antra, raskite kitų žmonių, kurie tuos daiktus peržiūrėjo / patiko / nusipirko.
  3. Trečia, nustatykite papildomus daiktus, kuriuos nusipirko tie žmonės.

Asmuo → produktas → (kiti) asmenys → (kiti) produktai

Naudodami ankstesnę diagramų technologiją, didesniuose duomenų rinkiniuose apsiribosite tik dviem apyniais. „TigerGraph“ lengvai išplečia užklausą į tris ar daugiau apynių, kad pateiktų pagrindines įžvalgas iš labai didelių duomenų rinkinių.

„TigerGraph“ realaus laiko giliųjų nuorodų analizė

„TigerGraph“ palaiko nuo trijų iki daugiau nei 10 apynių pervažiavimą per didelį grafiką, taip pat greitą grafiko perėjimo greitį ir duomenų atnaujinimus. Šis greičio, gilių perėjimų ir mastelio derinys suteikia didžiulius pranašumus keliems naudojimo atvejams.

Vienas naudojimo atvejis yra sukčiavimo prevencija. Vienas iš būdų, kaip įmonės nustato galimą sukčiavimą, yra surasti ryšius su žinomais blogais sandoriais. Pavyzdžiui, pradedant nuo gaunamos kredito kortelės operacijos, pateikiamas vienas kelias į blogas operacijas:

Nauja operacija → kreditinė kortelė → kortelės turėtojas → (kitos) kreditinės kortelės → (kitos) blogos operacijos

Kaip diagramos užklausą, šis modelis naudoja keturis apynius, kad surastų ryšius tik nuo vienos kortelės iki gaunamos operacijos. Šiandieniniai sukčiai bando nuslėpti savo veiklą per grandininius ryšius tarp savęs ir žinomos blogos veiklos ar blogų veikėjų. Norėdami tiksliai nustatyti sukčiavimą, turite ištirti kelis galimus modelius ir surinkti holistiškesnį vaizdą.

„TigerGraph“ turi galimybę atskleisti kelis, paslėptus ryšius, sumažinti sukčiavimą kreditinėmis kortelėmis. Ši perėjimo schema taikoma daugeliui kitų naudojimo atvejų - kai jūs galite tiesiog pakeisti kredito kortelės operaciją žiniatinklio paspaudimo įvykiu, telefono skambučių įrašu ar pinigų pervedimu.

„TigerGraph“ sistemos apžvalga

Norint realiu laiku užmegzti gilius ryšius tarp duomenų subjektų, reikia naujos technologijos, skirtos mastui ir našumui. Yra daugybė dizaino sprendimų, kurie bendradarbiauja, kad pasiektų „TigerGraph“ proveržio greitį ir mastelį. Žemiau mes apžvelgsime šias dizaino ypatybes ir aptarsime, kaip jie veikia kartu.

Gimtoji diagrama

„TigerGraph“ yra grynų grafų duomenų bazė nuo pat pradžių. Jo duomenų saugykloje yra mazgai, nuorodos ir jų atributai, laikotarpis. Kai kurie rinkoje esantys grafikų duomenų bazių produktai yra iš tikrųjų apvalkalai, sukurti ant bendresnės „NoSQL“ duomenų saugyklos. Ši virtualaus grafiko strategija turi dvigubą baudą, kai kalbama apie našumą. Pirma, vertimas iš virtualios grafikos operacijos į fizinę saugojimo operaciją įneša papildomo darbo. Antra, pagrindinė struktūra nėra optimizuota grafiko operacijoms atlikti.

Kompaktiška saugykla su greita prieiga

Mes neapibūdiname „TigerGraph“ kaip atminties duomenų bazės, nes duomenų turėjimas atmintyje yra pirmenybė, bet ne reikalavimas. Vartotojai gali nustatyti parametrus, nurodančius, kiek laisvos atminties galima naudoti grafikui laikyti. Jei visas grafikas netelpa atmintyje, perteklius saugomas diske. Geriausias našumas pasiekiamas, kai visas grafikas telpa atmintyje.

Duomenų vertės saugomos koduotais formatais, kurie efektyviai suglaudina duomenis. Glaudinimo koeficientas skiriasi priklausomai nuo grafiko struktūros ir duomenų, tačiau tipiški glaudinimo koeficientai yra nuo 2 iki 10 kartų. Suspaudimas turi du privalumus: Pirma, didesnis grafiko duomenų kiekis gali tilpti į atmintį ir talpyklą. Toks suspaudimas sumažina ne tik atminties plotą, bet ir praleidžia procesoriaus talpyklą, pagreitindamas bendrą užklausos našumą. Antra, vartotojams, turintiems labai didelius grafikus, sumažėja aparatūros išlaidos. Pavyzdžiui, jei suglaudinimo koeficientas yra 4x, organizacija gali sutalpinti visus savo duomenis vienoje mašinoje, o ne keturiose.

Išspausdinimas / dekodavimas yra labai greitas ir skaidrus galutiniams vartotojams, todėl suspaudimo nauda atsveria nedidelį suspaudimo / dekompresijos laiką. Paprastai dekompresija reikalinga tik duomenims rodyti. Kai reikšmės naudojamos viduje, jos dažnai gali likti užkoduotos ir suglaudintos.

Maišos indeksai naudojami mazgams ir nuorodoms nurodyti. „Big-O“ terminais kalbant, mūsų vidutinė prieigos trukmė yra O (1), o vidutinė indekso atnaujinimo trukmė taip pat yra O (1). Vertimas: prieiga prie konkretaus mazgo ar nuorodos diagramoje yra labai greita ir greita, net kai grafikas auga. Be to, labai greita išlaikyti indeksą, kai prie diagramos pridedami nauji mazgai ir nuorodos.

Lygiagretumas ir bendros vertybės

Kai jūsų tikslas yra greitis, turite du pagrindinius maršrutus: atlikite kiekvieną užduotį greičiau arba atlikite kelias užduotis vienu metu. Pastarasis kelias yra lygiagretumas. Siekdamas greitai atlikti kiekvieną užduotį, „TigerGraph“ taip pat pasižymi lygiagretumu. Jo grafiko variklis naudoja kelis vykdymo siūlus, kad pereitų grafiką.

Grafikų užklausų pobūdis yra „sekti nuorodas“. Pradėkite nuo vieno ar kelių mazgų. Pažvelkite į galimus tų mazgų ryšius ir sekite tuos ryšius su kai kuriais ar visais kaimyniniais mazgais. Mes sakome, kad jūs ką tik „apėjote“ vieną „apynių“. Pakartokite tą procesą, norėdami patekti į pirminio mazgo kaimynų kaimynus, ir jūs apėjote du apynius. Kadangi kiekvienas mazgas gali turėti daug jungčių, šis dviejų apynių perėjimas apima daugybę kelių, norint patekti iš pradinių mazgų į paskirties mazgus. Grafikai natūraliai tinka lygiagrečiam, daugiasriegiam vykdymui.

Žinoma, užklausa turėtų padaryti ne tik apsilankymą mazge. Paprastu atveju galime suskaičiuoti unikalių dviejų apynių kaimynų skaičių arba sudaryti jų ID sąrašą. Kaip apskaičiuoti bendrą skaičių, kai turite kelis lygiagrečius skaitiklius? Procesas yra panašus į tą, kurį darytumėte realiame pasaulyje: paprašykite kiekvieno skaitiklio atlikti savo dalį pasaulio, o tada galų gale sujungti jų rezultatus.

Prisiminkime, kad užklausoje buvo prašoma numerio Unikalus mazgai. Yra tikimybė, kad tą patį mazgą suskaičiavo du skirtingi skaitikliai, nes pasiekti tikslą yra daugiau nei vienas kelias. Ši problema gali kilti net ir su vieno sriegio dizainu. Standartinis sprendimas yra priskirti laikiną kintamąjį kiekvienam mazgui. Kintamieji inicijuojami į Netikras. Kai vienas skaitiklis aplanko mazgą, to mazgo kintamasis nustatomas į „True“, kad kiti skaitikliai žinotų, kad jo neskaičiuoja.

Saugojimo ir apdorojimo varikliai parašyti C ++

Kalbos pasirinkimas taip pat turi įtakos atlikimui. „TigerGraph“ grafikų saugojimo variklis ir apdorojimo variklis yra įdiegti C ++. Bendrosios paskirties procedūrinių kalbų šeimoje C ir C ++ yra laikomos žemesnio lygio, palyginti su kitomis kalbomis, tokiomis kaip Java. Tai reiškia, kad programuotojai, suprantantys, kaip kompiuterio aparatinė įranga vykdo savo programinės įrangos komandas, gali rinktis pagrįstai, kad optimizuotų našumą. „TigerGraph“ buvo kruopščiai sukurtas efektyviai naudoti atmintį ir atlaisvinti nepanaudotą atmintį. Kruopštus atminties valdymas prisideda prie „TigerGraph“ sugebėjimo per vieną užklausą pereiti daugybę nuorodų tiek gylio, tiek pločio atžvilgiu.

Daugelis kitų grafikų duomenų bazių produktų yra parašyti „Java“, kuri turi privalumų ir trūkumų. „Java“ programos veikia „Java“ virtualioje mašinoje (JVM). JVM rūpinasi atminties tvarkymu ir šiukšlių surinkimu (atlaisvina nebereikalingą atmintį). Nors tai yra patogu, programuotojui sunku optimizuoti atminties naudojimą arba kontroliuoti, kada tampa nepanaudota atmintis.

GSQL grafiko užklausos kalba

„TigerGraph“ taip pat turi savo grafikų užklausų ir atnaujinimo kalbą GSQL. Nors yra daug gražių detalių apie GSQL, aš sutelksiu dėmesį į du aspektus, kurie yra pagrindiniai efektyvaus lygiagretaus skaičiavimo palaikymui: ACCUM išlyga ir kaupiamieji kintamieji.

Daugelio GSQL užklausų esmė yra SELECT sakinys, tiksliai modeliuotas pagal SELECT sakinį SQL. Sąlygos „SELECT“, „FROM“ ir „WHERE“ naudojamos norint pasirinkti ir filtruoti nuorodų ar mazgų rinkinį. Po šio pasirinkimo pasirinktinė ACCUM sąlyga gali būti naudojama apibrėžiant veiksmų, kuriuos turi atlikti kiekviena nuoroda ar gretimas mazgas, rinkinį. Aš sakau „atlikti pagal“, o ne „atlikti“, nes konceptualiai kiekvienas grafo objektas yra nepriklausomas skaičiavimo vienetas. Grafiko struktūra veikia kaip masiškai lygiagreti skaičiavimo tinklelis. Diagrama nėra tik jūsų duomenų saugykla; tai taip pat yra jūsų užklausa arba analizės variklis.

ACCUM sąlygoje gali būti daug skirtingų veiksmų ar teiginių. Šie teiginiai gali nuskaityti diagramos objektų reikšmes, atlikti vietinius skaičiavimus, taikyti sąlyginius teiginius ir planuoti grafiko atnaujinimus. (Atnaujinimai neatliekami, kol baigsis užklausa.)

Kad būtų palaikomi šie paskirstyti užklausos skaičiavimai, GSQL kalba pateikia kaupiamųjų kintamųjų. Akumuliatorių yra įvairių skonių, tačiau jie visi yra laikini (egzistuoja tik vykdant užklausą), bendri (prieinami bet kuriai iš vykdymo gijų) ir vienas kitą išskiriantys (jį vienu metu gali atnaujinti tik viena gija). Pavyzdžiui, visų aukščiau minėtų kaimynų kaimynų skaičiavimui būtų naudojamas paprastas sumos kaupiklis. Nustatytas akumuliatorius būtų naudojamas visų tų kaimynų kaimynų tapatybės dokumentams įrašyti. Akumuliatoriai yra dviejų tipų: visuotinio ir kiekvieno mazgo. Ankstesniame užklausos pavyzdyje paminėjome būtinybę pažymėti kiekvieną mazgą kaip aplankytą ar ne. Čia būtų naudojami vieno mazgo akumuliatoriai.

MPP skaičiavimo modelis

Norėdami pakartoti tai, ką atskleidėme aukščiau, „TigerGraph“ grafikas yra ir laikymo, ir skaičiavimo modelis. Kiekvienas mazgas ir nuoroda gali būti susieti su skaičiavimo funkcija. Todėl „TigerGraph“ vienu metu veikia kaip lygiagretus saugojimo ir skaičiavimo vienetas. Tai būtų neįmanoma pasiekti naudojant bendrą „NoSQL“ duomenų saugyklą arba nenaudojant akumuliatorių.

Automatinis skaidymas

Šiandieniniame didžiųjų duomenų pasaulyje įmonėms reikalingi duomenų bazių sprendimai, kad galėtų išplėsti kelias mašinas, nes jų duomenys gali išaugti per dideli, kad būtų ekonomiškai saugomi viename serveryje. „TigerGraph“ sukurtas taip, kad grafikų duomenys būtų automatiškai padalijami į serverių grupę ir vis tiek būtų atliekami greitai. Maišos indeksas naudojamas nustatyti ne tik duomenų viduje serveryje, bet ir kuriame serveryje. Visos nuorodos, kurios jungiasi iš nurodyto mazgo, saugomos tame pačiame serveryje. Kompiuterių teorija mums sako, kad geriausio bendro grafiko skaidymo nustatymas, jei net galėtume apibrėžti „geriausias“, paprastai yra labai lėtas, todėl nesistengiame. Numatytasis režimas yra naudoti atsitiktinį maišymą, kuris daugeliu atvejų veikia labai gerai. „TigerGraph“ sistema taip pat palaiko vartotojo nukreiptą skaidymą vartotojams, turintiems galvoje tam tikrą skaidymo schemą.

Paskirstytasis skaičiavimo režimas

$config[zx-auto] not found$config[zx-overlay] not found