Programmēšana

Kāpēc jums vajadzētu izmantot diagrammu datu bāzi

Džefs Kārpenters ir DataStax tehniskais evaņģēlists.

Nesen bija daudz satraukumu par grafu datu bāzēm. Kamēr grafu datu bāzes, piemēram, DataStax Enterprise Graph (pamatojoties uz Titan DB), Neo4 un IBM Graph, pastāv jau vairākus gadus, nesenie paziņojumi par pārvaldītiem mākoņpakalpojumiem, piemēram, AWS Neptune, un Microsoft grafu iespēju pievienošana Azure Cosmos DB norāda, ka grafu datu bāzes ir iekļuvuši mainstream. Ņemot vērā visu šo interesi, kā noteikt, vai diagrammu datu bāze ir piemērota jūsu lietojumprogrammai?

Kas ir grafu datu bāze?

Pirms dodamies tālāk, definēsim dažas terminoloģijas. Kas ir grafu datu bāze? Padomājiet par to datu modeļa ziņā. Diagrammas datu modelis sastāv no virsotnes kas pārstāv domēna entītijas un malas kas pārstāv attiecības starp šīm vienībām. Tā kā gan virsotnēs, gan malās var tikt saukti papildu vārda un vērtības pāri īpašības, šo datu modeli oficiāli sauc par a rekvizītu grafiks. Dažās diagrammu datu bāzēs jums jānosaka a shēma jūsu grafikam - t.i. nosakot etiķetes vai virsotņu, malu un rekvizītu nosaukumi pirms datu aizpildīšanas, savukārt citas datu bāzes ļauj darboties bez fiksētas shēmas.

Kā jūs, iespējams, pamanījāt, diagrammas datu modelī nav jaunas informācijas, ko mēs nevarētu uztvert tradicionālajā relāciju datu modelī. Galu galā ir vienkārši aprakstīt attiecības starp tabulām, izmantojot svešas atslēgas, vai arī mēs varam aprakstīt attiecību īpašības ar pievienošanās tabulu. Galvenā atšķirība starp šiem datu modeļiem ir datu organizēšanas un piekļuves veids. Malu kā “pirmās klases pilsoņa” atzīšana blakus virsotnēm diagrammas datu modelī ļauj bāzes datu bāzes motoram ļoti ātri atkārtoties jebkurā virzienā, izmantojot virsotņu un malu tīklus, lai apmierinātu lietojumprogrammas vaicājumus, procesu, kas pazīstams kā šķērsojums.

Grafu datu modeļa elastība ir galvenais faktors, kas veicina neseno grafu datu bāzes popularitātes pieaugumu. Tās pašas prasības attiecībā uz pieejamību un apjomu, kas pēdējo 10 vai vairāk gadu laikā veicināja dažādu NoSQL piedāvājumu attīstību un pieņemšanu, turpina nest augļus nesenajā grafiku tendencē.

Kā uzzināt, kad nepieciešama diagrammu datu bāze

Tomēr, tāpat kā jebkurai populārai tehnoloģijai, var būt tendence grafu datu bāzes pielietot katrai problēmai. Ir svarīgi pārliecināties, vai jums ir piemērots lietojuma gadījums. Piemēram, diagrammas bieži tiek izmantotas tādiem problēmu domēniem kā:

  • Sociālie tīkli
  • Ieteikšana un personalizēšana
  • Klients 360, ieskaitot entītijas izšķirtspēju (korelē lietotāju datus no vairākiem avotiem)
  • Krāpšanas atklāšana
  • Aktīvu pārvaldība

Neatkarīgi no tā, vai izmantošanas gadījums atbilst kādam no šiem domēniem vai ne, jums jāapsver vēl daži faktori, kas var palīdzēt noteikt, vai diagrammu datu bāze jums ir piemērota:

  • Daudzas pret daudzām attiecības. Martins Kleppmans savā grāmatā “Datu intensīvu lietojumprogrammu izstrāde” (O’Reilly) iesaka, ka biežas attiecības starp daudziem jūsu problēmu jomā ir labs rādītājs diagrammu lietošanai, jo relāciju datu bāzes mēdz cīnīties, lai efektīvi virzītos pa šīm attiecībām.
  • Augsta attiecību vērtība. Vēl viena heiristika, ko esmu bieži dzirdējis: ja attiecības starp jūsu datu elementiem ir tikpat svarīgas vai svarīgākas nekā paši elementi, jums vajadzētu apsvērt iespēju izmantot diagrammu.
  • Zems latentums lielā mērogā. Citas datu bāzes pievienošana lietojumprogrammai arī palielina jūsu lietojumprogrammas sarežģītību. Grafiku datu bāzu spēja ātrāk nekā citos datubāzu veidos pārvietoties pa lielo datu kopu pārstāvētajām attiecībām ir tas, kas attaisno šo papildu sarežģītību. Tas jo īpaši attiecas uz gadījumiem, kad sarežģīts relāciju pievienošanās vaicājums vairs nedarbojas un vaicājumam vai relāciju struktūrai nav papildu optimizācijas ieguvumu.

Diagrammas shēmas un vaicājumu definēšana ar Gremlin

Apskatīsim, kā sākt izmantot diagrammu datu bāzi, izmantojot reālu piemēru - ieteikumu sistēmu, kuru nesen pievienojām KillrVideo. KillrVideo ir atsauces lietojumprogramma videoklipu koplietošanai un skatīšanai, ko mēs izveidojām, lai palīdzētu izstrādātājiem uzzināt, kā izmantot DataStax Enterprise, tostarp DataStax Enterprise Graph, diagrammu datu bāzi, kas izveidota virs ļoti mērogojamām datu tehnoloģijām, tostarp Apache Cassandra un Apache Spark.

Valoda, ko izmanto, lai aprakstītu un mijiedarbotos ar grafikiem DataStax Enterprise Graph, ir Gremlin, kas ir daļa no Apache TinkerPop projekta. Gremlin ir pazīstams kā pārejas valoda grafu šķērsošanas aprakstam, pateicoties tā elastībai, paplašināmībai un atbalstam gan deklaratīviem, gan imperatīviem vaicājumiem. Gremlin pamatā ir Groovy valoda, un draiveri ir pieejami vairākās valodās. Vissvarīgākais ir tas, ka Gremlin atbalsta populārākās grafu datu bāzes, tostarp DataStax Enterprise Graph, Neo4j, AWS Neptune un Azure Cosmos DB.

Mēs izstrādājām ieteikumu algoritmu, lai identificētu datus, kas mums būtu nepieciešami kā ievadi. Pieeja bija ģenerēt ieteikumus konkrētam lietotājam, pamatojoties uz videoklipiem, kas patika līdzīgiem lietotājiem. Mūsu mērķis bija ģenerēt ieteikumus reāllaikā, kad lietotāji mijiedarbojas ar lietojumprogrammu KillrVideo, t.i., kā OLTP mijiedarbība.

Lai definētu shēmu, mēs identificējām KillrVideo pārvaldīto datu apakškopu, kas mums vajadzīga mūsu diagrammai. Tas ietvēra lietotājus, videoklipus, vērtējumus un tagus, kā arī šo vienumu īpašības, uz kurām mēs varētu atsaukties algoritmā vai iekļaut ieteikumu rezultātos. Pēc tam mēs izveidojām Gremlinā diagrammas shēmu, kas izskatījās šādi:

// izveidot virsotņu etiķetes

schema.vertexLabel (“lietotājs”). partitionKey (‘userId’).

rekvizīti (“userId”, “email”, “added_date”). ifNotExists (). create ();

schema.vertexLabel (“video”). partitionKey (‘videoId’).

rekvizīti (“videoId”, “nosaukums”, “apraksts”, “pievienots_datums”,

preview_image_location ”). ifNotExists (). create ();

schema.vertexLabel (“tags”). partitionKey (‘nosaukums’).

rekvizīti (“nosaukums”, “tagged_date”). ifNotExists (). create ();

// izveidot malu etiķetes

schema.edgeLabel (“novērtēts”). vairāki (). rekvizīti (“vērtējums”).

savienojums (“lietotājs”, “video”). ifNotExists (). izveidot ();

schema.edgeLabel (“augšupielādēts”). single (). rekvizīti (“added_date”).

savienojums (“lietotājs”, “video”). ifNotExists (). izveidot ();

schema.edgeLabel (“taggedWith”). viens ().

savienojums (“video”, “tags”). ifNotExists (). create ();

Mēs izvēlējāmies modelēt lietotājus, videoklipus un tagus kā virsotnes, un izmantojām malas, lai noteiktu, kuri lietotāji kādus videoklipus augšupielādēja, videoklipu lietotāju vērtējumus un tagus, kas saistīti ar katru videoklipu. Mēs piešķirām rekvizītus virsotnēm un malām, uz kurām ir atsauce vaicājumos vai kuras tiek iekļautas rezultātos. Iegūtā shēma izskatās šādi DataStax Studio, piezīmjdatoru stila izstrādātāju rīkā, lai izstrādātu un izpildītu vaicājumus CQL un Gremlin.

Pamatojoties uz šo shēmu, mēs definējām vaicājumus, kas aizpilda datus diagrammā, un vaicājumus, kas iegūst datus no diagrammas. Apskatīsim diagrammas vaicājumu, kas ģenerē ieteikumus. Lūk, pamata plūsma: konkrētam lietotājam identificējiet līdzīgus lietotājus, kuriem patika videoklipi, kas viņam patika, atlasiet videoklipus, kas patika arī līdzīgiem lietotājiem, izslēdziet videoklipus, kurus lietotājs jau ir noskatījies, pasūtiet tos pēc popularitātes un sniedziet rezultātus.

def numRatingsToSample = 1000

def localUserRatingsToSample = 10

def minPositiveRating = 4

def userID = ...

g.V (). has (“lietotājs”, “userId”, lietotāja ID) .as (“^ currentUser”)

// iegūstiet visus videoklipus, kurus lietotājs noskatījās, un saglabājiet tos

.map (out (‘rated’). dedup (). fold ()). as (“^ watchVideos”)

// atgriezties pie pašreizējā lietotāja

.select (“^ currentUser”)

// identificējiet videoklipus, kurus lietotājs novērtēja augsti

.outE (‘novērtēts’). has (‘vērtējums’, gte (minPositiveRating)). inV ()

// kādi citi lietotāji ļoti novērtēja šos videoklipus?

.inE (‘novērtēts’). has (‘vērtējums’, gte (minPositiveRating))

// ierobežojiet rezultātu skaitu, tāpēc tas darbosies kā OLTP vaicājums

.sample (numRatingsToSample)

// kārtot pēc vērtējuma, lai sniegtu priekšroku lietotājiem, kuri vislabāk novērtēja šos videoklipus

.by (‘vērtējums’). outV ()

// likvidēt pašreizējo lietotāju

.kur (neq (“^ currentUser”))

Uz brīdi apstājamies, lai atvilktu elpu. Līdz šim šajā šķērsošanā mēs esam identificējuši līdzīgus lietotājus. Ceļojuma otrā daļa uzņem līdzīgus lietotājus, paņem ierobežotu skaitu līdzīgiem lietotājiem patikušo videoklipu, noņem videoklipus, kurus lietotājs jau ir noskatījies, un ģenerē rezultātu kopu, kas sakārtots pēc popularitātes.

  // atlasiet ierobežotu skaitu ļoti vērtētu videoklipu no katra līdzīga lietotāja

.local (outE (‘rated’). has (‘rating’, gte (minPositiveRating)). limit (localUserRatingsToSample)). sack (piešķirt) .by (‘rating’). inV ()

// izslēgt videoklipus, kurus lietotājs jau ir noskatījies

.not (kur (iekš ((^ skatītie videoklipi))))

// identificējiet populārākos videoklipus pēc visu vērtējumu summas

.grupa (). pēc (). pēc (maiss (). summa ())

// tagad, kad mums ir liela [video: score] karte, pasūtiet to

.order (local) .by (vērtības, decr) .limit (local, 100). select (taustiņi) .unfold ()

// izvada ieteicamos videoklipus, ieskaitot lietotāju, kurš augšupielādēja katru videoklipu

.project (‘video’, ’user’)

. ar ()

. by (__. iekš (‘augšupielādēts’))

Lai gan šī šķērsošana izskatās sarežģīta, paturiet prātā, ka tā ir visa ieteikumu algoritma biznesa loģika. Šeit mēs detalizēti neiedziļināsimies katrā šīs šķērsošanas posmā, taču valodas atsauce ir lielisks resurss, un ir pieejami augstas kvalitātes apmācības kursi.

Es iesaku interaktīvi attīstīt šķērsošanu, izmantojot reprezentatīvu datu kopu, izmantojot tādu rīku kā DataStax Studio vai Gremlin konsoli no Apache TinkerPop. Tas ļauj ātri atkārtot un precizēt savus šķērsošanas gadījumus. DataStax Studio ir tīmekļa vide, kas nodrošina vairākus veidus, kā vizualizēt šķērsošanas rezultātus kā mezglu un malu tīklus, kā parādīts zemāk esošajā attēlā. Citi atbalstītie skati ietver tabulas, diagrammas un diagrammas, kā arī veiktspējas izsekošanu.

DataStax

Grafu datu bāzes iekļaušana arhitektūrā

Kad esat izveidojis diagrammas shēmu un vaicājumus, ir pienācis laiks diagrammu integrēt lietojumprogrammā. Lūk, kā mēs integrējām DataStax Enterprise Graph KillrVideo. KillrVideo daudzlīmeņu arhitektūra sastāv no tīmekļa lietojumprogrammas, kas atrodas virs mikroservisu komplekta, kas pārvalda lietotājus, videoklipus (ieskaitot tagus) un vērtējumus. Šie pakalpojumi izmanto datu glabāšanai DataStax Enterprise Graph datu bāzi (kas veidota uz Apache Cassandra) datu glabāšanai un piekļuvei datiem, izmantojot CQL.

Mēs ieviesām mūsu ieteikumu motoru kā daļu no ieteikto videoklipu pakalpojuma, kā parādīts zemāk. Šis pakalpojums ģenerē ieteikumu sarakstu ar lietotāja ID. Lai ieviestu ieteikumu motoru, mēs pārtulkojām iepriekš aprakstīto Gremlin šķērsošanu Java kodā.

DataStax

Šī arhitektūra izceļ biežu problēmu mikropakalpojumu arhitektūrā - nepieciešamību mijiedarboties ar datiem, kas pieder vairākiem pakalpojumiem. Kā parādīts iepriekš, ieteikumu ģenerēšanai izmantotā diagramma ir balstīta uz datiem no lietotāju pārvaldības, video kataloga un vērtējumu pakalpojumiem.

Mēs saglabājām pašreizējo pakalpojumu datu īpašumtiesības, izmantojot asinhrono ziņojumapmaiņu. Pakalpojumi Lietotāju pārvaldība, Video katalogs un Vērtējumi publicē notikumus par datu izmaiņām. Ieteikto videoklipu pakalpojums abonē šos notikumus un veic atbilstošus diagrammas atjauninājumus. Šeit veiktie kompromisi ir tipiski lietojumprogrammām, kurās tiek izmantota vairāku modeļu pieeja, tēma, kuru es izpētīju iepriekšējā rakstā.

Gremlin šķērsošanas ieviešana Java

DataStax Java draiveris nodrošina draudzīgu, tekošu API, lai ieviestu Gremlin šķērsošanu ar DataStax Enterprise Graph. API padarīja triviālu migrēt uz Groovy balstītus vaicājumus, kurus izveidojām DataStax Studio, Java kodā.

Pēc tam mēs varējām padarīt savu Java kodu vēl lasāmāku un uzturamāku, izmantojot Gremlin funkciju, kas pazīstama kā DSL, domēna valodas. DSL ir Gremlin paplašinājums uz konkrētu domēnu. KillrVideo mēs izveidojām DSL, lai paplašinātu Gremlin šķērsošanas ieviešanu ar noteikumiem, kas attiecas uz video domēnu. The KillrVideoTraversalDsl klase nosaka vaicājuma darbības, piemēram, user (), kas atrod virsotni diagrammā ar norādīto UUID, un recommendByUserRating (), kas ģenerē ieteikumus sniegtajam lietotājam, pamatojoties uz tādiem parametriem kā minimālais vērtējums un pieprasītais ieteikumu skaits.

DSL izmantošana vienkāršoja ieteikto videoklipu pakalpojuma ieviešanu līdzīgam zemāk redzamajam paraugam, kas rada GraphStatement ko pēc tam izpildām, izmantojot DataStax Java draiveri:

GraphStatement gStatement = DseGraph.statementFromTraversal (killr.users (userIdString)

.recommendByUserRating (100, 4, 500, 10)

);

DSL izmantošana ļāva mums slēpt daļu no mūsu grafu mijiedarbības sarežģītības atkārtoti lietojamās funkcijās, kuras pēc tam pēc vajadzības var apvienot, lai izveidotu sarežģītākas šķērsošanas. Tas ļaus mums ieviest papildu ieteikumu dzinējus, kas sākas ar izvēlēto lietotāja virsotni, ko nodrošina lietotājs () metodi un ļauj lietojumprogrammai pāriet starp dažādām ieviešanām.

Darba grafika piemērs

Zemāk redzamās tīmekļa lietojumprogrammas sadaļā “Ieteicams jums” varat redzēt mūsu DataStax Enterprise Graph integrēšanas KillrVideo rezultātus. Izmēģiniet to vietnē //www.killrvideo.com, izveidojot kontu un novērtējot dažus videoklipus.

DataStax

Es ceru, ka šis raksts sniedz dažas lieliskas idejas par to, kā diagrammu datu bāzei varētu būt jēga jūsu lietojumprogrammai un kā sākt darbu ar Gremlin un DataStax Enterprise Graph.

Džefs Karpenters ir tehniskais evaņģēlists no DataStax, kur viņš izmanto savu pieredzi sistēmas arhitektūrā, mikropakalpojumos un Apache Cassandra, lai palīdzētu izstrādātājiem un operāciju inženieriem izveidot sadalītas, uzticamas un drošas sistēmas. Džefs ir grāmatas Cassandra: The Definitive Guide, 2. izdevums autors.

Jauno tehnoloģiju forums nodrošina vietu, kur bezprecedenta dziļumā un plašumā izpētīt un pārrunāt topošās uzņēmuma tehnoloģijas. Izvēle ir subjektīva, balstoties uz mūsu izvēlētajām tehnoloģijām, kuras, mūsuprāt, ir svarīgas un interesē lasītājus. nepieņem mārketinga nodrošinājumu publicēšanai un patur tiesības rediģēt visu ieguldīto saturu. Nosūtiet visus jautājumus uz[email protected].

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