NOSQL Graph Vector Database - PDF
Document Details
Uploaded by FaultlessDidgeridoo
Universiteit Gent
Tags
Summary
This document provides information on different types of NoSQL databases, focusing specifically on graph databases and vector databases. It details the structural and behavioral aspects of these database types, including examples and explanations. The examples provided include specific queries in Cypher, a query language.
Full Transcript
# Types van NoSQL-databases Kies het geschikte type in functie van de data en toepassing. | NoSQL Type | Description | |-----------------------------------|-----------------------------------------------------------------| |...
# Types van NoSQL-databases Kies het geschikte type in functie van de data en toepassing. | NoSQL Type | Description | |-----------------------------------|-----------------------------------------------------------------| | 9.1 Key-value stores | Key-value-databases | | 9.2 Document stores | Documentdatabases | | 9.3 Wide column stores | Kolomgeoriënteerde databases | | 9.4 Graph databases | Graafdatabases | | 9.5 Vector databases | Vectordatabases | | 9.7 NewSQL | | # 9.4 Graph Databases ## 9.4.1 Structurele aspecten - Voor sterk gekoppelde data: - Oplossing voor het snelheidsprobleem bij verwerking van verwantschappen in RDBMS (joins!) - Geen vaste databaseschema: - Geen vastgelegde entiteits- en relatietypes - Waarin de eigenschappen (attributen) van entiteiten en relaties worden vastgelegd. - > schemaloze database - Gemakkelijk om nieuwe soorten van verwantschappen toe te voegen, zonder dat die vooraf in een databaseschema moeten voorzien zijn. ## 9.4.2 Gedragsaspecten - Meestal eigen DQL en DML - Bijv. neo4J: DQL (ook complexe query's) &DML “Cypher” (declaratieve taal) - GQL (Graph Query Language) = ISO-standaard in wording, gebaseerd op Cypher **Cypher DQL** 1. Zoeken in knopen ``` MATCH (kunstschilder:Artiest) WHERE kunstschilder.Sterfjaar = 1926 RETURN kunstschilder.Naam as naam, kunstschilder.Voornaam as voornaam ORDER BY naam ASC ; ``` - naam en voornaam van alle artiesten die gestorven zijn in 1926. "kunstschilder" is een soort variabele. ``` MATCH (James:Artiest {Naam: ‘Ensor', Voornaam: ‘James'}) RETURN James.Naam as naam, James.Voornaam as voornaam, James.Geboortejaar as geboortejaar; ``` - alternatieve notatie i.p.v. WHERE-clausule. ``` MATCH (Kunstschilders:Artiest) RETURN Kunstschilders LIMIT 100; ``` - alle info uit alle artiestknopen, beperkt tot honderd knopen 2. Zoeken in gekoppelde knopen - Basisformaat: `(knopen) - [relatie ] -> ( andere_knopen)` - `( knopen )` = een deelverzameling van knopen van waaruit je wil zoeken (kan leeg zijn) - `[ relatie ]` = een deelverzameling van relaties via dewelke je wil zoeken (kan leeg zijn) -andere_knopen ) = een deelverzameling v. knopen waarover je info wil opvragen (kan leeg zijn) ``` MATCH ( :Schilderij {Naam: ‘Schilderend geraamte'}) - [ :heeft_thema ] -> (tma:Thema) RETURN tma.Naam as themanaam ; ``` - de namen van de thema's van het schilderij 'Schilderend geraamte' ``` MATCH ( :Schilderij {Naam: ‘Schilderend geraamte’})-[]-> () RETURN COUNT(*); ``` - [ relatie ) en (andere_knopen) zijn leeg. ``` MATCH (Jan:Artiest {Voornaam: ‘Jan’})-[r]-> (s: Schilderij ) RETURN TYPE(r), s.Naam as schilderijen; ``` - resultatenlijst: | TYPE(r) | schilderijen | |-----------|-------------| | bezit | 'Zicht op zee' | | schilderde | 'Bloemen' | 3. Zoeken via paden ``` MATCH (:Artiest {Naam: ‘Ensor', Voornaam: 'James'}) - [:kent*2] -> (collega: Artiest) RETURN DISTINCT collega.Naam as naam, collega.voornaam as voornaam ; ``` - naam en voornaam van alle artiesten die kennissen zijn van een directe kennis van James Ensor - “2de-graads kennis”: exact twee kent-relaties verwijderd van James Ensor | naam | voornaam | |--------|----------| | 'Renoir' | 'Auguste' | | 'Degas' | 'Edgar' | ``` MATCH ( :Artiest {Naam: ‘Ensor', Voornaam: 'James'}) - [ :kent*1..5 ] -> (collega:Artiest) RETURN DISTINCT collega.Naam as naam, collega.Voornaam as voornaam ; ``` - naam en voornaam van alle artiesten die 1ste- tot 5de-graads kennissen zijn van James Ensor **Cypher DML (CUD)** - **Creation** - `CREATE`: knopen of relaties toevoegen - **Update** - `SET`: labels van knopen en eigenschappen van knopen en relaties aanpassen - **Deletion** - `DELETE`: knopen of relaties verwijderen - `REMOVE`: labels van knopen en eigenschappen van knopen en relaties verwijderen ## 9.4.3 Opslagaspecten - Meestal: - AP-systeem - Horizontaal schalen d.m.v. sharding - Bijv.: Neo4J - AP-systeem (BASE) - casuat causal consistency (= sterkere consistentie dan eventual consistency): - Het dbms garandeert dat een applicatie (of gebruiker) bij het lezen ofwel de data terugkrijgt die ze zelf heeft weggeschreven, ofwel recentere waarden van deze data terugkrijgt. - Sommige RDBMS (bijv. Microsoft SQL Server, Oracle DB) bieden graph-faciliteiten: - CA- of CP-systeem (ACID) - geen volwaardig NoSQL-systeem: - CA-systeem: geen Partition-tolerance -> geen horizontaal schalen (volumeprobleem) - CP-systeem: geen Availability -> trager (snelheidsprobleem) - Voorbeelden: - neo4j - OrientDB - ArangoDB - GraphDB - Memgraph - Amazon Neptune - JanusGraph - NebulaGraph # 9.5 Vectordatabases ## 9.5.1 Structurele en semantische aspecten - Voorbeeld: Dynizer - database is opgebouwd uit “actietopologieën”, - geëxtraheerd uit gestructureerde, semigestructureerde en ongestructureerde data - Voorbeeld van actietopologie: - "James Ensor etste in 1890 'De baden van Oostende'." - wordt: `[ 'James Ensor' :wie:{}, etsen:actie:{), 1890:wanneer:{}, 'De baden van Oostende' :wat:{} ];` - Actietopologieën = metadata. De brondata (teksten,...) zijn de feitelijke data. - Extractieproces: - tekst (natuurlijke taal) wordt omgezet in “actietopologieën”. - Lemmatisering: - uniforme bewoording door verbogen woordvormen voor te stellen door hun lemma - actie = een centrale handeling, proces of toestand - in natuurlijke taal: vaak een werkwoord - in gestructureerde data: de naam van een tabel, een document of een graaf - actietopologie : een actie + context (wie- (onderwerp), wat- (voorwerp), waar- (plaats) en wanneer- (tijd) componenten) - “WWWW-model” (Wie-Wat-Waar-Wanneer) of W4-model. - Voorbeelden: - `[ 'James Ensor' :wie: {}, etsen:actie:{), 1890:wanneer:{}, 'De baden van Oostende' :wat:{} ];` - `[ 'Théo van Rysselberghe' :wie: {}, leven: actie:{}; 1862:wanneer: {geboortejaar}, 1926:wanneer: {sterfjaar} ];` - semantische classificatie (semantische type) = 'actie', 'wie', 'wat', 'waar' of 'wanneer' - labelverzameling: een label is een meer concrete (vrij te kiezen) omschrijving van de betekenis van de woordgroep - binnen de context van een de actietopologie - Voorbeeld: ongestructureerde data modelleren met actietopologieën > "James Ensor etste in 1890 'De baden van Oostende'. Kunstpaus Octave Maus gaf ‘De baden van > Oostende' in 1894 een ereplaats op de eerste tentoonstelling van 'La Libre Esthétique'. Octave Maus was > een Brusselse advocaat en schrijver. Hij richtte in 1883 samen met verschillende kunstenaars 'Les XX' > op. Bekende leden van 'Les XX' waren James Ensor, Auguste Rodin en Jan Toorop. Théo van Rysselberghe > schilderde meerdere portretten van Octave Maus. Théo van Rysselberghe was een Gentse neo- > impressionistische kunstschilder die leefde van 1862 tot 1926.“ - (acties vetgedrukt) | Actietopologieën | |-------------------------------------------------------| | `[ 'James Ensor' :wie:{}, etsen: actie:{), 1890:wanneer:{}, 'De baden van Oostende' :wat:{} ];` | | `[ 'Octave Maus' :wie: {kunstpaus}, geven: actie: {}, 'De baden van Oostende' :wat: {}, 1894 :wanneer:{), 'ereplaats' :wat:{},` | | `'eerste tentoonstelling' :waar:{'La Libre Esthétique'}];` | | `[ 'Octave Maus' :wie: {}, zijn:actie:{), 'Brussel':waar:{}, 'advocaat' :wat:{}, 'schrijver' :wat:{} ];` | | `[ 'Octave Maus' :wie:{}, oprichten: actie:{}, 1883:wanneer:{), 'verschillende kunstenaars' :wie:{}, 'Les XX' :wat:{} ];` | | `[ 'Bekende leden' :wat:{}, 'Les XX' :wat:{}, zijn:actie: {}, 'James Ensor' :wie:{), 'Auguste Rodin' :wie:{}, 'Jan Toorop' :wie:{} ];` | | `[ 'Théo van Rysselberghe' : wie:{}, schilderen:actie:{}; 'meerdere portretten' :wat:{}, 'Octave Maus' :wie:{} ];` | | `[ 'Théo van Rysselberghe' :wie:{}, zijn:actie:{}; 'Gent' :waar:{}, 'neo-impressionistisch kunstschilder' :wat:{) ];` | | `[ 'Théo van Rysselberghe' :wie: {}, leven: actie:{}; 1862:wanneer: {geboortejaar}, 1926:wanneer: {sterfjaar} ];` | | Actietopologieën: | |---------------------------------------------------------------------------------------------| | Théo van Rysselberghe | | | leven | | | 1862 | | | 1926 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |