Programmēšana

TigerGraph: skaidrota paralēlo grafu datu bāze

Viktors Lī ir TigerGraph produktu vadības direktors.

Grafiku datu bāzes lieliski atbild uz sarežģītiem jautājumiem par attiecībām lielās datu kopās. Bet tie ietriecas sienā - gan veiktspējas, gan analīzes iespēju ziņā - kad datu apjoms pieaug ļoti liels un kad atbildes jāsniedz reāllaikā.

Tas ir tāpēc, ka esošajām diagrammu tehnoloģijām ir grūtības reālā laikā ielādēt lielu datu daudzumu vai ātri iegūt datus. Viņi arī cīnās, lai nodrošinātu ātru šķērsošanas ātrumu. Lai gan dziļākai analīzei ir nepieciešama dziļāka diagrammas šķērsošana, mūsdienu diagrammu datu bāzes parasti palēninās vai iestājas noildze pēc diviem apiņu apļiem.

TigerGraph ir izplatīta, vietēja grafu skaitļošanas platforma, kas paredzēta, lai apietu šos ierobežojumus. TigerGraph vietējās paralēlās diagrammas arhitektūras un reāllaika dziļo saišu analīzes mērķis ir sniegt šādas priekšrocības:

  • Ātrāka datu ielāde, lai ātri izveidotu grafikus
  • Ātrāka paralēlo grafu algoritmu izpilde
  • Reāllaika iespējas straumēt atjauninājumus un ieliktņus, izmantojot REST
  • Spēja apvienot reāllaika analīzi, izmantojot liela mēroga bezsaistes datu apstrādi
  • Spēja palielināt un paplašināt izplatītās lietojumprogrammas

Turpmākajās sadaļās mēs īsi apskatīsim, kā darbojas diagrammu apstrāde, izpētīsim dziļo saišu analīzes priekšrocības un pacelsim TigerGraph vāku, lai saprastu, kā tā reāllaikā var sniegt dziļo saišu analīzi.

Grafika šķērsošana: vairāk apiņu, vairāk ieskatu

Kāpēc dziļo saišu analīze? Jo vairāk saites jūs varat šķērsot (lēciens) diagrammā, jo lielāku ieskatu jūs gūstat. Apsveriet hibrīdu zināšanas un sociālo diagrammu. Katrs mezgls savienojas ar kas jūs zināt un PVO jūs zināt. Tiešās saites (viens apiņš) atklāj to, ko jūs zināt. Divi apiņi atklāj visu, ko zina jūsu draugi un paziņas. Trīs apiņi? Jūs esat ceļā, lai atklātu ko visi zina.

Grafika priekšrocība ir zināt attiecības starp datu entītijām datu kopā, kas ir zināšanu atklāšanas, modelēšanas un prognozēšanas pamatā. Katrs apiņš var izraisīt eksponenciālu savienojumu skaita un attiecīgi zināšanu apjoma pieaugumu. Bet tajā slēpjas tehnoloģiskais šķērslis. Reālā laika dziļo saišu (multi-hop) analīzi var nodrošināt tikai sistēma, kas efektīvi un paralēli veic apiņus.

Vienkāršs piemērs, piemēram, reāllaika personalizēts ieteikums, parāda vairāku saišu vērtību grafikā un vērtību:

"Klienti, kuriem patika tas, kas jums patika, arī iegādājās šīs preces."

Tas nozīmē trīs apiņu vaicājumu:

  1. Sākot ar personu (jūs), identificējiet preces, kuras skatījāties / patika / iegādājāties.
  2. Otrkārt, atrodiet citus cilvēkus, kuri ir apskatījuši / iepatikušies / iegādājušies šīs preces.
  3. Treškārt, identificējiet papildu preces, ko iegādājās šie cilvēki.

Persona → produkts → (citas) personas → (citas) preces

Izmantojot iepriekšējo diagrammu tehnoloģiju, lielākās datu kopās jums vajadzētu būt tikai diviem apiņiem. TigerGraph viegli paplašina vaicājumu līdz trim vai vairākiem apiņiem, lai sniegtu galvenos ieskatus no ļoti lielām datu kopām.

TigerGraph reāllaika dziļo saišu analīze

TigerGraph atbalsta trīs līdz vairāk nekā 10 apiņu pārvietošanos lielā diagrammā, kā arī ātru diagrammas šķērsošanas ātrumu un datu atjauninājumus. Šī ātruma, dziļu šķērsošanas un mērogojamības kombinācija piedāvā milzīgas priekšrocības vairākos lietošanas gadījumos.

Viens izmantošanas gadījums ir krāpšanas novēršana. Viens no veidiem, kā uzņēmumi atklāj iespējamo krāpšanu, ir atrast savienojumus ar zināmiem sliktiem darījumiem. Piemēram, sākot ar ienākošo kredītkartes darījumu, šeit ir viens ceļš uz sliktiem darījumiem:

Jauns darījums → kredītkarte → kartes īpašnieks → (citas) kredītkartes → (citas) sliktas darbības

Kā diagrammas vaicājumu šis modelis izmanto četrus apiņus, lai atrastu savienojumus tikai vienas kartes attālumā no ienākošā darījuma. Mūsdienu krāpnieki cenšas slēpt savu darbību, izmantojot cirkulārus sakarus starp sevi un zināmu sliktu darbību vai sliktiem dalībniekiem. Lai precīzi atklātu krāpšanu, jums jāizpēta vairāki iespējamie modeļi un jāsastāda visaptverošāks skats.

Izmantojot iespēju atklāt vairākus slēptus savienojumus, TigerGraph spēj samazināt krāpšanos ar kredītkartēm. Šis šķērsošanas modelis attiecas uz daudziem citiem lietošanas gadījumiem, kad kredītkartes darījumu varat vienkārši aizstāt ar tīmekļa klikšķa notikumu, tālruņa zvana ierakstu vai naudas pārskaitījumu.

TigerGraph sistēmas pārskats

Lai spētu reāllaikā izveidot dziļas saiknes starp datu entītijām, nepieciešama jauna tehnoloģija, kas paredzēta mērogam un veiktspējai. Ir daudz dizaina lēmumu, kas sadarbojas, lai sasniegtu TigerGraph izrāviena ātrumu un mērogojamību. Zemāk mēs apskatīsim šīs dizaina iezīmes un apspriedīsim, kā tās darbojas kopā.

Vietējais grafiks

TigerGraph ir tīra grafu datu bāze no paša sākuma. Tās datu krātuvē ir mezgli, saites un to atribūti, punkts. Daži tirgū esošie diagrammu datu bāzes produkti patiešām ir ietinēji, kas izveidoti virs vispārīgāka NoSQL datu krātuves. Šai virtuālās diagrammas stratēģijai ir divkāršs sods attiecībā uz veiktspēju. Pirmkārt, tulkojums no virtuālā grafa darbības uz fiziskās glabāšanas darbību ievieš papildu darbu. Otrkārt, pamata struktūra nav optimizēta grafika operācijām.

Kompakta atmiņa ar ātru piekļuvi

Mēs neraksturo TigerGraph kā atmiņā ievietotu datu bāzi, jo datu saglabāšana atmiņā ir priekšroka, bet ne prasība. Lietotāji var iestatīt parametrus, kas norāda, cik daudz pieejamās atmiņas var izmantot diagrammas turēšanai. Ja pilns grafiks neietilpst atmiņā, pārpalikums tiek saglabāts diskā. Vislabākais sniegums tiek sasniegts, ja pilns grafiks, protams, ietilpst atmiņā.

Datu vērtības tiek saglabātas kodētos formātos, kas efektīvi saspiež datus. Saspiešanas koeficients mainās atkarībā no diagrammas struktūras un datiem, bet tipiskie saspiešanas koeficienti ir no 2x līdz 10x. Kompresijai ir divas priekšrocības: pirmkārt, lielāks grafu datu daudzums var ietilpt atmiņā un kešatmiņā. Šāda saspiešana samazina ne tikai atmiņas apjomu, bet arī CPU kešatmiņas izlaišanu, paātrinot kopējo vaicājumu veiktspēju. Otrkārt, lietotājiem ar ļoti lieliem grafikiem aparatūras izmaksas tiek samazinātas. Piemēram, ja saspiešanas koeficients ir 4x, organizācija, iespējams, var visus savus datus ievietot vienā mašīnā, nevis četrās.

Dekompresēšana / dekodēšana galalietotājiem ir ļoti ātra un pārredzama, tāpēc saspiešanas priekšrocības atsver nelielu saspiešanas / dekompresijas laika aizturi. Parasti dekompresija ir nepieciešama tikai datu parādīšanai. Ja vērtības tiek izmantotas iekšēji, tās bieži var palikt kodētas un saspiestas.

Hash indeksi tiek izmantoti mezglu un saišu atsaucei. Big-O izteiksmē mūsu vidējais piekļuves laiks ir O (1), un mūsu vidējais indeksa atjaunināšanas laiks ir arī O (1). Tulkojums: piekļuve konkrētam mezglam vai saitei diagrammā ir ļoti ātra, un tā paliek ātra, pat ja diagramma palielinās. Turklāt indeksa uzturēšana, kad diagrammai tiek pievienoti jauni mezgli un saites, ir arī ļoti ātra.

Paralēlisms un kopīgas vērtības

Kad jūsu mērķis ir ātrums, jums ir divi pamata maršruti: veiciet katru uzdevumu ātrāk vai veiciet vairākus uzdevumus vienlaikus. Pēdējais ceļš ir paralēlisms. Cenšoties ātri izpildīt katru uzdevumu, TigerGraph izceļas arī ar paralēlismu. Tā diagrammu motors izmanto vairākus izpildes pavedienus, lai šķērsotu grafu.

Grafu vaicājumu būtība ir “sekot saitēm”. Sāciet no viena vai vairākiem mezgliem. Apskatiet pieejamos savienojumus no šiem mezgliem un sekojiet šiem savienojumiem ar dažiem vai visiem blakus esošajiem mezgliem. Mēs sakām, ka jūs tikko esat "pārcēlis" vienu "apiņu". Atkārtojiet šo procesu, lai dotos pie sākotnējā mezgla kaimiņu kaimiņiem, un jūs esat šķērsojis divus apiņus. Tā kā katram mezglam var būt daudz savienojumu, šī divu apiņu šķērsošana ietver daudzus ceļus, lai nokļūtu no sākuma mezgliem līdz galamērķa mezgliem. Grafiki ir dabiski piemēroti paralēlai, daudzšķiedru izpildei.

Vaicājumam, protams, vajadzētu darīt vairāk nekā tikai apmeklēt mezglu. Vienkāršā gadījumā mēs varam saskaitīt unikālo divu apiņu kaimiņu skaitu vai sastādīt viņu ID sarakstu. Kā aprēķināt kopējo skaitu, ja jums ir vairāki paralēli skaitītāji? Process ir līdzīgs tam, ko jūs darītu reālajā pasaulē: palūdziet katram skaitītājam veikt savu daļu no pasaules un pēc tam apvienojiet to rezultātus.

Atgādinām, ka vaicājumā tika prasīts to skaits unikāls mezgli. Pastāv iespēja, ka to pašu mezglu ir saskaitījuši divi dažādi skaitītāji, jo ir vairāk nekā viens ceļš, lai sasniegtu šo galamērķi. Šī problēma var rasties pat ar viena vītnes dizainu. Standarta risinājums ir piešķirt pagaidu mainīgo katram mezglam. Mainīgie tiek inicializēti kā False. Kad viens skaitītājs apmeklē mezglu, šī mezgla mainīgais tiek iestatīts uz True, lai citi skaitītāji zinātu, ka to neskaita.

Uzglabāšanas un apstrādes dzinēji, kas rakstīti C ++

Valodas izvēle ietekmē arī sniegumu. TigerGraph grafu glabāšanas dzinējs un apstrādes dzinējs tiek ieviests C ++. Procesuālo valodu vispārējā mērķgrupā C un C ++ tiek uzskatītas par zemāka līmeņa, salīdzinot ar citām valodām, piemēram, Java. Tas nozīmē, ka programmētāji, kuri saprot, kā datortehnika izpilda savas programmatūras komandas, var izdarīt apzinātu izvēli, lai optimizētu veiktspēju. TigerGraph ir rūpīgi izstrādāts, lai efektīvi izmantotu atmiņu un atbrīvotu neizmantoto atmiņu. Rūpīga atmiņas pārvaldība veicina TigerGraph spēju vienā vaicājumā šķērsot daudzas saites gan dziļuma, gan platuma ziņā.

Daudzi citi diagrammu datu bāzes produkti ir rakstīti Java valodā, kurai ir plusi un mīnusi. Java programmas darbojas Java virtuālajā mašīnā (JVM). JVM rūpējas par atmiņas pārvaldību un atkritumu savākšanu (atbrīvojot vairs nevajadzīgu atmiņu). Lai gan tas ir ērti, programmētājam ir grūti optimizēt atmiņas lietojumu vai kontrolēt, kad kļūst pieejama neizmantotā atmiņa.

GSQL grafika vaicājuma valoda

TigerGraph ir arī sava grafika vaicājumu un atjaunināšanas valoda GSQL. Lai gan ir daudz jauku detaļu par GSQL, es koncentrēšos uz diviem aspektiem, kas ir svarīgi efektīvas paralēlas aprēķināšanas atbalstam: ACCUM klauzula un akumulatora mainīgie.

Lielākā daļa GSQL vaicājumu kodols ir SELECT priekšraksts, kas ir cieši modelēts pēc SQL priekšraksta SQL. Klauzulas SELECT, FROM un WHERE tiek izmantotas, lai atlasītu un filtrētu saišu vai mezglu kopu. Pēc šīs izvēles izvēles klauzulu ACCUM var izmantot, lai noteiktu darbību kopumu, kas jāveic katrai saitei vai blakus esošajam mezglam. Es saku “veikt pēc”, nevis “izpildīt tālāk”, jo konceptuāli katrs grafa objekts ir neatkarīga skaitļošanas vienība. Grafu struktūra darbojas kā masveidā paralēla skaitļošanas acs. Diagramma nav tikai jūsu datu glabāšana; tas ir arī jūsu vaicājums vai analītikas dzinējs.

ACCUM klauzulā var būt daudz dažādu darbību vai paziņojumu. Šie apgalvojumi var nolasīt diagrammas objektu vērtības, veikt lokālus aprēķinus, piemērot nosacījuma priekšrakstus un ieplānot grafika atjauninājumus. (Atjaunināšana nenotiek, kamēr vaicājums nav beidzies.)

Lai atbalstītu šos sadalītos vaicājumā iekļautos aprēķinus, GSQL valoda nodrošina akumulatora mainīgos. Akumulatoriem ir daudz garšu, taču tie visi ir pagaidu (pastāv tikai vaicājuma izpildes laikā), koplietoti (pieejami jebkuram izpildes pavedieniem) un savstarpēji izslēdzoši (tikai viens pavediens var to atjaunināt vienlaikus). Piemēram, visu iepriekš minēto kaimiņu kaimiņu skaitīšanai izmantos vienkāršu akumulatoru. Visu šo kaimiņu kaimiņu ID reģistrēšanai tiks izmantots noteikts akumulators. Akumulatori ir pieejami divos apjomos: globālais un katram mezglam. Iepriekšējā vaicājuma piemērā mēs pieminējām nepieciešamību atzīmēt katru mezglu kā apmeklētu vai nē. Šeit tiktu izmantoti viena mezgla akumulatori.

MPP skaitļošanas modelis

Lai atkārtotu to, ko esam atklājuši iepriekš, TigerGraph grafiks ir gan glabāšanas, gan skaitļošanas modelis. Katru mezglu un saiti var saistīt ar skaitļošanas funkciju. Tāpēc TigerGraph vienlaikus darbojas kā paralēla glabāšanas un skaitļošanas vienība. Tas nebūtu sasniedzams, izmantojot vispārēju NoSQL datu krātuvi vai neizmantojot akumulatorus.

Automātiska sadalīšana

Mūsdienu lielo datu pasaulē uzņēmumiem ir nepieciešami viņu datubāzes risinājumi, lai tos varētu pielāgot vairākām mašīnām, jo ​​viņu dati var izaugt pārāk lieli, lai tos ekonomiski varētu uzglabāt vienā serverī. TigerGraph ir paredzēts, lai automātiski sadalītu diagrammas datus serveru kopās un joprojām darbotos ātri. Hash indekss tiek izmantots, lai noteiktu ne tikai servera datu atrašanās vietu, bet arī to, kurš serveris. Visas saites, kuras izveido savienojumu no noteiktā mezgla, tiek glabātas tajā pašā serverī. Datorzinātņu teorija mums saka, ka vislabākās vispārējās grafu sadalīšanas atrašana, ja mēs pat varētu noteikt “labākais”, parasti ir ļoti lēna, tāpēc mēs nemēģinām. Mūsu noklusējuma režīms ir nejaušas jaukšanas izmantošana, kas vairumā gadījumu darbojas ļoti labi. TigerGraph sistēma atbalsta arī lietotāju vērstu sadalīšanu lietotājiem, kuriem ir domāta konkrēta sadalīšanas shēma.

Izkliedētais skaitļošanas režīms