Ohjelmointi

Miksi sinun tulisi käyttää kaaviotietokantaa

Jeff Carpenter on tekninen evankelista DataStaxissa.

Viime aikoina on ollut paljon hyppyjä graafitietokannoista. Vaikka graafitietokannat, kuten DataStax Enterprise Graph (perustuu Titan DB: hen), Neo4 ja IBM Graph, ovat olleet olemassa useita vuosia, viimeisimmät ilmoitukset hallinnoiduista pilvipalveluista, kuten AWS Neptune ja Microsoftin lisäämät graafiominaisuudet Azure Cosmos DB: hen, osoittavat, että graafitietokannat ovat tulleet valtavirtaan. Kaikilla tämän kiinnostuksen kohteilla, kuinka voit selvittää, onko graafitietokanta oikea sovelluksellesi?

Mikä on kaaviotietokanta?

Ennen kuin siirrymme eteenpäin, määritellään terminologia. Mikä on kaaviotietokanta? Ajattele sitä datamallin suhteen. Kaaviotietomalli koostuu kärjet - jotka edustavat toimialueen yksiköitä, ja - reunat jotka edustavat näiden yksiköiden välisiä suhteita. Koska sekä kärjissä että reunoissa voi olla ylimääräisiä nimi-arvo-pareja ominaisuudet, tämä tietomalli tunnetaan virallisesti nimellä a ominaisuuskaavio. Jotkin kaaviotietokannat edellyttävät, että määrität a skeema kaaviollesi - ts. määrittelevä tarrat tai pisteiden, reunojen ja ominaisuuksien nimet ennen tietojen lisäämistä - muiden tietokantojen avulla voit toimia ilman kiinteää mallia.

Kuten olet ehkä huomannut, kaaviotietomallissa ei ole mitään uutta tietoa, jota emme pystyisi kaappaamaan perinteiseen relaatiotietomalliin. Loppujen lopuksi on helppo kuvata taulukoiden välisiä suhteita ulkomaisilla avaimilla, tai voimme kuvata liittymispöydän suhteen ominaisuuksia. Suurin ero näiden tietomallien välillä on tapa, jolla data on järjestetty ja siihen pääsee. Reunojen tunnistaminen "ensimmäisen luokan kansalaiseksi" pisteiden rinnalla kaaviotietomallissa antaa tietokannan moottorille mahdollisuuden toistaa hyvin nopeasti mihin tahansa suuntaan pisteiden ja reunojen verkkojen kautta, jotta voidaan täyttää sovelluskyselyt. läpikulkua.

Kuvaajatietomallin joustavuus on keskeinen tekijä, joka johtaa viimeaikaiseen nousuun graafitietokantojen suosiossa. Samat saatavuuden ja mittakaavan vaatimukset, jotka ajoivat erilaisten NoSQL-tarjonnan kehittämisen ja käyttöönoton viimeisen kymmenen vuoden aikana, tuottavat edelleen hedelmää viimeaikaisessa graafisessa trendissä.

Kuinka tietää milloin tarvitset kaaviotietokannan

Kuten minkä tahansa suositun tekniikan kohdalla, voi olla taipumus käyttää graafitietokantoja kaikkiin ongelmiin. On tärkeää varmistaa, että sinulla on sopiva käyttötapa. Esimerkiksi kaavioita käytetään usein ongelmakohteisiin, kuten:

  • Sosiaaliset verkostot
  • Suositus ja mukauttaminen
  • Customer 360, mukaan lukien entiteettien tarkkuus (korreloi useista lähteistä peräisin olevia käyttäjätietoja)
  • Petosten havaitseminen
  • Vahvuuksien hallinta

Soveltuuko käyttötapauksesi johonkin näistä toimialueista vai ei, sinun on harkittava joitain muita tekijöitä, jotka voivat auttaa määrittämään, sopiiko kaaviotietokanta sinulle:

  • Monista moniin-suhteet. Martin Kleppmann ehdottaa kirjassaan "Suunnittelu tietointensiivisiin sovelluksiin" (O’Reilly), että ongelma-alueesi usein toistuvat suhteet moniin-moniin ovat hyvä indikaattori kuvaajien käytölle, koska relaatiotietokannat pyrkivät kamppailemaan näiden suhteiden tehokkaan navigoinnin suhteen.
  • Suhteiden suuri arvo. Toinen heuristiikka, jonka olen usein kuullut: Jos tietoelementtien väliset suhteet ovat yhtä tärkeitä tai tärkeämpiä kuin itse elementit, sinun kannattaa harkita kuvaajan käyttöä.
  • Matala viive suuressa mittakaavassa. Uuden tietokannan lisääminen sovellukseesi lisää myös sovelluksesi monimutkaisuutta. Kuvaajatietokantojen kyky selata suurissa tietojoukoissa esitettyjä suhteita nopeammin kuin muun tyyppiset tietokannat on perusteltu tämä monimutkaisuus. Tämä pätee erityisesti tapauksissa, joissa monimutkainen relaatioliitäntäkysely ei enää toimi ja kyselylle tai relaatiorakenteelle ei ole saatavana lisäoptimointivoitoja.

Graafikaavion ja kyselyjen määritteleminen Gremlinillä

Katsotaanpa, miten voit aloittaa kaaviotietokannan käytön todellisen esimerkin avulla, suosittelijajärjestelmän, jonka olemme äskettäin lisänneet KillrVideoon. KillrVideo on referenssisovellus videoiden jakamiseen ja katselemiseen, jonka olemme rakentaneet auttaaksemme kehittäjiä oppimaan DataStax Enterprisen käytön, mukaan lukien DataStax Enterprise Graph, graafitietokanta, joka on rakennettu erittäin skaalautuvien tietotekniikoiden, kuten Apache Cassandra ja Apache Spark, päälle.

DataStax Enterprise Graphin kuvaajien kuvaamiseen ja vuorovaikutukseen käytetty kieli on Gremlin, joka on osa Apache TinkerPop -projektia. Gremlin tunnetaan siirtymäkielenä kuvaajaliikenteen kuvaamiseen sen joustavuuden, laajennettavuuden ja tuen vuoksi sekä deklaratiivisille että pakollisille kyselyille. Gremlin perustuu Groovy-kieleen, ja ohjaimia on saatavana useilla kielillä. Mikä tärkeintä, Gremliniä tukevat suosituimmat graafitietokannat, kuten DataStax Enterprise Graph, Neo4j, AWS Neptune ja Azure Cosmos DB.

Suunnittelimme suositusalgoritmin tunnistaaksemme tarvittavat tiedot. Tavoitteena oli tuottaa suosituksia tietylle käyttäjälle videoiden perusteella, jotka pitivät samanlaisista käyttäjistä. Tavoitteenamme oli tuottaa suosituksia reaaliajassa, kun käyttäjät ovat vuorovaikutuksessa KillrVideo-sovelluksen kanssa, eli OLTP-vuorovaikutuksena.

Kaavan määrittelemiseksi tunnistimme KillrVideon hallinnoiman datan osajoukon, jota tarvitsimme kaaviossamme. Tämä sisälsi käyttäjiä, videoita, luokituksia ja tunnisteita sekä näiden kohteiden ominaisuuksia, joihin voimme viitata algoritmissa tai esiintyä suositustuloksissa. Sitten loimme Gremliniin kaaviokuvan, joka näytti tältä:

// luo kärkitunnisteet

schema.vertexLabel (“käyttäjä”). partitionKey (’userId’).

ominaisuudet ("userId", "email", "added_date"). ifNotExists (). create ();

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

ominaisuudet ("videoId", "nimi", "kuvaus", "lisätty_päivä",

esikatselukuvan_sijainti ”). ifNotExists (). create ();

schema.vertexLabel (“tag”). partitionKey (’nimi’).

ominaisuudet ("nimi", "tagged_date"). ifNotExists (). create ();

// luoda reunatunnisteita

schema.edgeLabel ("mitoitettu"). useita (). ominaisuuksia ("arvio").

yhteys ("käyttäjä", "video"). ifNotExists (). create ();

schema.edgeLabel ("ladattu"). single (). ominaisuudet ("added_date").

yhteys ("käyttäjä", "video"). ifNotExists (). create ();

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

yhteys ("video", "tag"). ifNotExists (). create ();

Valitsimme mallintamaan käyttäjät, videot ja tunnisteet pisteinä ja käytimme reunoja tunnistamaan, mitkä käyttäjät lähettivät videot, videoiden käyttäjäarvostelut ja kuhunkin videoon liittyvät tunnisteet. Määritimme pisteille ja reunoille ominaisuuksia, joihin viitataan kyselyissä tai jotka sisältyvät tuloksiin. Tuloksena oleva malli näyttää tältä DataStax Studiossa, kannettavan tyylisessä kehittäjätyökalussa kyselyjen kehittämiseksi ja suorittamiseksi CQL: ssä ja Gremlinissä.

Tämän mallin perusteella määritimme kyselyt, jotka täyttävät tiedot kaavioon, ja kyselyt, jotka hakevat tietoja kaaviosta. Tarkastellaan kaaviokyselyä, joka luo suosituksia. Tässä on perusvirta: Määritä tietylle käyttäjälle samanlaiset käyttäjät, jotka pitivät tietyn käyttäjän pitämistä videoista, valitse videot, joista samankaltaiset käyttäjät pitivät, poissulkea videot, jotka käyttäjä on jo katsellut, tilaa ne videot suosion mukaan ja anna tulokset.

def numRatingsToSample = 1000

def localUserRatingsToSample = 10

def minPositiveRating = 4

def userID = ...

g.V (). has ("käyttäjä", "userId", käyttäjän tunnus) .as ("^ currentUser")

// hanki kaikki käyttäjän katselemat videot ja tallenna ne

.map (out (’arvioitu’). dedup (). fold ()). as (”^ watchVideos”)

// palaa nykyiselle käyttäjälle

.select (”^ currentUser”)

// tunnista videot, jotka käyttäjä arvioi erittäin hyvin

.outE (’luokiteltu’). has (’luokitus’, gte (minPositiveRating)). inV ()

// mitkä muut käyttäjät arvioivat nämä videot erittäin hyvin?

.inE (’luokiteltu’). has (’luokitus’, gte (minPositiveRating))

// rajoita tulosten määrää, jotta tämä toimii OLTP-kyselynä

.sample (numRatingsToSample)

// lajittele luokituksen perusteella suosimaan käyttäjiä, jotka arvioivat kyseiset videot eniten

.by (’luokitus’). outV ()

// poista nykyinen käyttäjä

.where (neq (“^ currentUser”))

Pysähdytään hetkeksi hengähtämään. Tähän mennessä olemme tunnistaneet samanlaisia ​​käyttäjiä tässä läpikäynnissä. Läpikäynnin toinen osa vie nämä samanlaiset käyttäjät, nappaa rajoitetun määrän videoita, jotka samankaltaiset käyttäjät pitivät, poistaa videot, jotka käyttäjä on jo katsellut, ja tuottaa tulosjoukon lajiteltu suosion mukaan.

  // valitse rajoitettu määrä erittäin arvostettuja videoita kustakin samanlaisesta käyttäjästä

.local (outE (’rated’). has (’rating’, gte (minPositiveRating)). raja (localUserRatingsToSample)). sack (assign) .by (’rating’). inV ()

// sulje pois videot, joita käyttäjä on jo katsellut

.not (missä (sisällä ((^ katsotut videot))))

// tunnista suosituimmat videot kaikkien luokitusten summalla

.ryhmä (). (). mukaan (säkki (). summa ())

// Nyt kun meillä on iso kartta [video: pisteet], tilaa se

. order (paikallinen) .by (arvot, decr) .limit (paikallinen, 100) .select (avaimet) .unfold ()

// tuottaa suositellut videot, mukaan lukien käyttäjän, joka on ladannut kunkin videon

.project (’video’, ’käyttäjä’)

.

.by (__. (ladattu))

Vaikka tämä läpikäynti näyttää monimutkaiselta, muista, että se on suositusalgoritmin koko liiketoimintalogiikka. Emme kaivaa tämän matkan jokaista vaihetta yksityiskohtaisesti täällä, mutta kieliviite on hieno resurssi, ja saatavilla on korkealaatuisia koulutuskursseja.

Suosittelen läpikulkujen kehittämistä vuorovaikutteisesti edustavan tietojoukon yli käyttämällä työkalua, kuten DataStax Studio tai Apache TinkerPopin Gremlin-konsoli. Tämän avulla voit nopeasti toistaa ja tarkentaa matkojasi. DataStax Studio on verkkopohjainen ympäristö, joka tarjoaa useita tapoja visualisoida läpikulkutuloksia solmujen ja reunojen verkkoina, kuten alla olevassa kuvassa näkyy. Muita tuettuja näkymiä ovat taulukot, kaaviot ja kaaviot sekä suorituskyvyn jäljitys.

DataStax

Graafitietokannan sisällyttäminen arkkitehtuuriin

Kun olet suunnitellut kaaviokaavion ja kyselyt, on aika integroida kaavio sovellukseesi. Näin integroimme DataStax Enterprise Graphin KillrVideoon. KillrVideon monitasoinen arkkitehtuuri koostuu verkkosovelluksesta, joka sijaitsee joukon mikropalveluja, jotka hallitsevat käyttäjiä, videoita (mukaan lukien tunnisteet) ja luokituksia. Nämä palvelut hyödyntävät DataStax Enterprise Graph -tietokantaa (rakennettu Apache Cassandraan) tietojen tallentamiseen ja pääsyyn tietoihin CQL: n avulla.

Toteutimme suositusmoottorimme osana Suggested Videos -palvelua alla olevan kuvan mukaisesti. Tämä palvelu luo luettelon suosituksista, joille annetaan käyttäjätunnus. Suositusmoottorin toteuttamiseksi käännimme edellä kuvatun Gremlin-läpikulun Java-koodiksi.

DataStax

Tämä arkkitehtuuri tuo esiin mikropalveluarkkitehtuureissa usein esiintyvän haasteen - tarpeen olla vuorovaikutuksessa useiden palveluiden omistaman datan kanssa. Kuten yllä on esitetty, suositusten luomiseen käytetty kaavio perustuu Käyttäjähallinta-, Videoluettelo- ja Arviointipalvelujen tietoihin.

Säilytimme nykyisten palvelujemme tietojen omistajuuden käyttämällä asynkronista viestintää. Käyttäjähallinta-, videoluettelo- ja luokituspalvelut julkaisevat tapahtumia tietojen muutoksista. Ehdotetut videot -palvelu tilaa nämä tapahtumat ja päivittää kaavioon vastaavat päivitykset. Tässä tekemämme kompromissit ovat tyypillisiä sovelluksille, jotka käyttävät monimallista lähestymistapaa, aihetta, jota tutkin edellisessä artikkelissani.

Gremlin-läpikulkujen toteuttaminen Javalla

DataStax Java -ohjain tarjoaa ystävällisen, sujuvan sovellusliittymän Gremlin-läpikulkujen toteuttamiseen DataStax Enterprise Graph -sovelluksella. Sovellusliittymä teki triviaalista siirtää DataStax Studiossa luomamme Groovy-pohjaiset kyselyt Java-koodiksi.

Sitten pystyimme tekemään Java-koodistamme vieläkin luettavamman ja ylläpidettävämmän käyttämällä Gremlin-ominaisuutta, joka tunnetaan nimellä DSL, toimialakohtaiset kielet. DSL on Gremlinin laajennus tietylle verkkotunnukselle. KillrVideoa varten loimme DSL: n laajentaaksemme Gremlinin läpikulun toteutusta termeillä, jotka liittyvät videotunnukseen. KillrVideoTraversalDsl luokka määrittää kyselyoperaatiot, kuten user (), joka etsii kaavion kärjen toimitetulla UUID: llä, ja SuositteleByUserRating (), joka tuottaa suosituksia tarjotulle käyttäjälle parametrien, kuten vähimmäisluokitus ja pyydetty määrä suosituksia, perusteella.

DSL: n käyttö yksinkertaisti ehdotettujen videoiden palvelun toteuttamista alla olevan esimerkin kaltaiseksi, mikä luo GraphStatement että suoritamme sitten DataStax Java -ohjaimen avulla:

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

.recommendByUserRating (100, 4, 500, 10)

);

DSL: n käyttö antoi meille mahdollisuuden piilottaa osa graafin vuorovaikutuksistamme uudelleenkäytettävissä funktioissa, jotka voidaan sitten yhdistää tarpeen mukaan muodostamaan monimutkaisempia kulkuja. Tämä antaa meille mahdollisuuden toteuttaa muita suositusmoottoreita, jotka alkavat valitusta käyttäjän kärjestä, jonka tarjoaa käyttäjä () ja anna sovelluksen vaihtaa eri toteutusten välillä.

Toimiva kaavioesimerkki

Näet tulokset DataStax Enterprise Graphin integroinnista KillrVideoon alla olevan verkkosovelluksen “Suosittelemme sinulle” -osiossa. Kokeile itse osoitteessa //www.killrvideo.com luomalla tili ja arvioimalla muutama video.

DataStax

Toivon, että tämä artikkeli antaa sinulle hienoja ideoita siitä, miten kaaviotietokanta voi olla järkevää sovelluksellesi ja kuinka aloittaa Gremlin ja DataStax Enterprise Graph.

Jeff Carpenter on tekninen evankelista DataStaxissa, jossa hän hyödyntää taustaansa järjestelmäarkkitehtuurissa, mikropalveluissa ja Apache Cassandrassa auttaakseen kehittäjiä ja operaattoreita rakentamaan hajautettuja järjestelmiä, jotka ovat skaalautuvia, luotettavia ja turvallisia. Jeff on kirjoittanut Cassandra: The Definitive Guide, 2nd Edition.

New Tech Forum tarjoaa mahdollisuuden tutkia ja keskustella kehittyvistä yritysteknologioista ennennäkemättömällä syvyydellä ja laajuudella. Valinta on subjektiivinen, perustuu valitsemiemme tekniikoihin, joiden uskomme olevan tärkeitä ja kiinnostavia lukijoille. ei hyväksy markkinointivakuuksia julkaisua varten ja pidättää oikeuden muokata kaikkea lähetettyä sisältöä. Lähetä kaikki tiedustelut osoitteeseen[email protected].

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