Grafowe języki zapytań. Anna Kosieradzka



Podobne dokumenty
Język SQL, zajęcia nr 1

Wykład 8. SQL praca z tabelami 5

Wykład 05 Bazy danych

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

Jerzy Nawrocki, Wprowadzenie do informatyki

*Grafomania z. Neo4j. Praktyczne wprowadzenie do grafowej bazy danych.

Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL,

Post-relacyjne bazy danych

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Neo4J. Warsztat z grafowej bazy danych Neo4J. Warsztaty: do zdobycia 20 pkt.

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Baza danych sql. 1. Wprowadzenie. 2. Repozytaria generyczne

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Hurtownia Świętego Mikołaja projekt bazy danych

Oracle PL/SQL. Paweł Rajba.

Platforma.NET laboratorium 4 Aktualizacja: 15/11/2013. Visual Basic.NET dostęp do bazy danych. Baza Microsoft SQL Server Compact

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

Bazy Danych i Usługi Sieciowe

Bazy danych. Dr inż. Paweł Kasprowski

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Informatyka (5) SQL. dr inż. Katarzyna Palikowska Katedra Transportu Szynowego p. 4 Hydro

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.

Bazy danych i usługi sieciowe

Przestrzenne bazy danych Podstawy języka SQL

Temporalne bazy danych

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Relacyjne bazy danych. Podstawy SQL

Nowe technologie baz danych

Wprowadzenie do JDBC z wykorzystaniem bazy H2

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

Systemy GIS Tworzenie zapytań w bazach danych

Bazy danych. dr Radosław Matusik. radmat

Rozszerzenie funkcjonalności systemów wiki w oparciu o wtyczki i Prolog

Monika Sychla Daniel Smolarek Projekt bazy danych

STWORZENIE BIBLIOTEKI SŁUŻĄCEJ DO WCZYTYWANIA

BAZA DANYCH SIECI HOTELI

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

Programowanie w języku Java. Bazy danych SQLite w Javie

Bartosz Jachnik - Kino

Struktura drzewa w MySQL. Michał Tyszczenko

Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu.

Bazy danych 7. SQL podstawy

ACESS- zadania z wykorzystaniem poleceń SQL

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Paweł Rajba

15. Funkcje i procedury składowane PL/SQL

Język SQL. Rozdział 10. Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne.

Oracle PL/SQL. Paweł Rajba.

PLAN WYKŁADU BAZY DANYCH PODSTAWOWE KWESTIE BEZPIECZEŃSTWA OGRANICZENIA DOSTĘPU DO DANYCH

Programowanie obiektowe

Wykład 5. SQL praca z tabelami 2

Strumieniowe bazy danych. Piotr i Paweł

Relacyjne bazy danych. Podstawy SQL

Programowanie obiektowe

Modelowanie hierarchicznych struktur w relacyjnych bazach danych

Wykład 6. SQL praca z tabelami 3

Podstawy otwartych języków programowania Przechowywanie danych

PHP: bazy danych, SQL, AJAX i JSON

Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław r.

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Co to jest Baza Danych

Wielojęzykowość w aplikacjach J2EE. Tomasz.Skutnik@e-point.pl

P o d s t a w y j ę z y k a S Q L

Plan ćwiczenia. Rozdział 16 Uwierzytelnianie i autoryzacja w bazie danych. Użytkownicy i schematy (1) Użytkownicy i schematy (2) baza danych: ZESP99

PRZEGLĄD WYBRANYCH BAZ NOSQL. Sławomir Dadas

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2. zadania

Ref. 7 - Język SQL - polecenia DDL i DML

Aspekty aktywne baz danych

1. Połączenie z bazą danych. W wybranym edytorze tworzymy plik sqltest.py i umieszczamy w nim poniższy kod. #!/usr/bin/python3 import sqlite3

Język SQL. instrukcja laboratoryjna. Politechnika Śląska Instytut Informatyki. laboratorium Bazy Danych

Protokół JDBC współpraca z relacyjnymi bazami danych lab4. Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych

Materiały do laboratorium MS ACCESS BASIC

Metody dostępu do danych

Obiektowe bazy danych

Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory.

Bazy danych Ćwiczenia projektowe

Modelowanie wymiarów

Autor: Joanna Karwowska

Projektowanie aplikacji w modelu MVC opartej o framework CodeIgniter

Pakiety podprogramów Dynamiczny SQL

Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle

Podejście obiektowe do relacyjnych baz danych Hibernate.

SQL w języku PL/SQL. 2) Instrukcje języka definicji danych DDL DROP, CREATE, ALTER, GRANT, REVOKE

akademia androida Składowanie danych część VI

Technologia informacyjna

Instalacja MySQL.

Sprawdzenie czy połączenie przebiegło poprawnie if (mysqli_connect_errno()) { echo Błąd; Połączenie z bazą danych nie powiodło się.

Programowanie wielowarstwowe i komponentowe

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Uprawnienia, role, synonimy

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska

Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL

Podstawowe wykorzystanie Hibernate

Zarządzanie danymi przestrzennymi. Analizy przestrzenne

Aplikacje bazodanowe. dr inż. Arkadiusz Mirakowski

Transkrypt:

Grafowe języki zapytań Anna Kosieradzka

Grafowe języki zapytań Ogólne: Blueprints Gremlin GraphQL SPARQL Związane z jedną bazą danych: SQL (OrientDB) GQL (sones GraphDB) inne API

Graf na dzisiaj

Graf z własnościami (Property Graph) Graf z własnościami składa się z: wierzchołków takich, że: każdy ma unikalny identyfikator każdy ma zbiór krawędzi wchodzących każdy ma zbiór krawędzi wychodzących każdy ma zbiór własności (pary klucz, wartość) krawędzi takich, że: każda ma unikalny identyfikator każda ma wierzchołek początkowy każda ma wierzchołek końcowy każda ma etykietę opisującą zwiącek między jej wierzchołkami każda ma zbiór własności (pary klucz, wartość)

Blueprints API w Javie kompatybilne m.in. z: grafowe bazy danych: DEX Neo4j OrientDB biblioteki: TinkerGraph SAIL (Storage and Inference Layer) Rexster (serwer http udostępniający grafy) w przyszłości może również z: InfiniteGraph (prace w trakcie) inne

Blueprints - tworzenie nowego grafu Graph graph = new TinkerGraph(); Vertex a = graph.addvertex(null); Vertex b = graph.addvertex(null); a.setproperty("name", "marko"); b.setproperty("name", "peter"); Edge e = graph.addedge(null, a, b, "knows"); System.out.println( e.getoutvertex().getproperty("name") + "--" + e.getlabel() + "-->" + e.getinvertex().getproperty("name")); Wynik: marko--knows-->peter

Blueprints- iterowanie po grafie Kod: for (Vertex vertex : graph.getvertices()) { System.out.println(vertex); } da wynik: v[3] v[2] v[1] v[6] v[5] v[4] Kod: for (Edge edge : graph.getedges()) { System.out.println(edge); } da wynik: e[10][4-created->5] e[7][1-knows->2] e[9][1-created->3]...

Gremlin Język do iterowania po grafach z własnościami Składnia przypominająca Groovy Korzysta z Pipes Ma API w Javie oraz konsolę: marko$./gremlin.sh \,,,/ (o o) -----oooo-(_)-oooo----- gremlin>

Pipes Pipe<S,E> to interfejs w Javie rozszerzający Iterable<E> i Iterator<E>. Pipe<S,E> bierze na wejściu Iterator<S> lub Iterable<S> i zwraca obiekty typu E.

Pipes - przykład Następujący kod: Pipe<String,Integer> countpipe = new CountPipe(); Pipe<Integer,String> wordpipe = new WordPipe(); Pipeline<String,String> pipeline = new Pipeline<String,String>(countPipe, wordpipe); pipeline.setstarts(arrays.aslist("this", "is", "the", "end.")); while(pipeline.hasnext()) { System.out.print(pipeline.next() + " "); } da na wyjściu: four two three four

Gremlin - iterowanie po grafie Dobry start: gremlin> g = TinkerGraphFactory. createtinkergraph() ==> tinkergraph[vertices:6 edges:6] Dostęp do wierzchołka 1: gremlin> v = g.v(1) ==>v[1] Krawędzie wychodzące z wierzchołka 1: gremlin> v.oute ==>e[7][1-knows->2] ==>e[9][1-created->3] ==>e[8][1-knows->4]

Gremlin - podstawowe słówka _ emituje obiekt z wejścia (niezmieniony) - IdentityPipe() V, E Iteratory po odp. wierzchołkach i krawędziach id, label Identyfikator i etykieta elementu - IdPipe(), LabelPipe() oute, ine krawędzie wychodzące / wchodzące z / do danego wierzchołka - OutEdgesPipe(), InEdgesPipe() bothe outv, inv wszystkie krawędzie od i do tego wierzchołka odp. wierzchołek początkowy i końcowy krawędzi gremlin> v.oute.inv ==>v[2] ==>v[3] ==>v[4] bothv ['key'], key oba powyższe właściwość elementu - PropertyPipe('key') gremlin> v.name ==>marko

Gremlin - wybrane metody Graph.v(Object) Graph.e(Object) Graph.addVertex() Graph.addVertex(Object, Map) Graph.addVertex(Map) Graph.addEdge(Object, Vertex, Vertex, String, Map) Graph.addEdge(Vertex, Vertex, String, Map) Element.key Element[key] = value Element.keys() Element.values() Element.map() Pipe>>n Pipe>>-1 Pipe>>Collection Pipe.count() Dostęp do wierzchołka po identyfikatorze Dostęp do krawędzi po identyfikatorze Dodawanie wierzchołków Dodawanie krawędzi Operacje na mapach własności Pobranie n lub wszystkich elemetów z pipe. Dodaje zawartość pipe do collection. Zwraca liczbę elementów w pipe.

GraphQL Teoretyczny: np. operator selekcji to σ Pełen opis w: Huahai He; Ambuj K. Singh; Graphs-at-atime: Query Language and Access Methods for Graph Databases, SIGMOD, June, 2008, pp 405-418. ISBN: 978-1-60558-102-6 Brak dostępnej implementacji Jedno zastosowanie: PharmaMiner firmy Acelot, Inc (premiera: 2. połowa 2011)

SPARQL SPARQL Protocol and RDF Query Language RDF = Resource Description Framework Działa z AllegroGraph Przykład: zapytanie o wszystkie stolice w Afryce: PREFIX abc: <http://example. com/exampleontology#> SELECT?capital?country WHERE {?x abc:cityname?capital ; abc:iscapitalof?y.?y abc:countryname?country ; abc:isincontinent abc:africa. }

GraphDB GQL Odchodzimy od koncepcji grafu z własnościami Wierzchołki są silnie typowane Krawędzie nie mają własności (co najwyżej wagi) Pracę zaczynamy od tworzenia typów: CREATE TYPE Person ATTRIBUTES(String name, Integer age, SET<Project> Projects) CREATE TYPE Project ATTRIBUTES(String name, String lang) BACKWARDEDGES (Person.Projects Authors) Istnieją ALTER TYPE, DROP TYPE, DESCRIBE TYPES.

GraphDB GQL Insert i Update wyglądają znajomo: INSERT INTO Person VALUES (name = 'vadas', age = 27) UPDATE Person SET(Projects += SETOF(name = 'lop')) WHERE name = 'marko' Nowością w Select jest parametr Depth, np.: FROM Website w SELECT w.tags WHERE w.name = 'xkcd' DEPTH 1 jest równoważne: FROM Tag t SELECT t.name WHERE t. TaggedWebsites.Name = 'xkcd'

OrientDB SQL Wierzchołki są słabo typowane Każdy wierzchołek ma swój RecordID postaci: [<cluster>: <position>] Są 2 rodzaje relacji pomiędzy wierzchołkami: referenced i embedded. Referenced oznacza, że jeden rekord przechowywuje wskaźnik do drugiego. Oba rekordy mają własne RID. Do relacji 1-1 i N-1 używa się typu LINK. Do relacji 1-N i N-M używa się typów LINKLIST, LINKSET i LINKMAP. Embedded oznacza, że jeden rekord zawiera się w drugim - nie ma wówczas własnego RID. Typy to EMBEDDED[LIST SET MAP].

OrientDB SQL - CREATE Najpierw tworzymy typy: create class Person create class Project Następnie tworzymy własności: create property Person.name string create property Person.age integer create property Project.name string create property Project.lang string create property Person.Projects embeddedmap Project

OrientDB SQL - INSERT i UPDATE Zwykłe inserty są standardowe: insert into Person (name, age) values ('marko', 29) insert into Project (name, lang) values ('lop', 'java') Gdy pojawiają się relacje, używamy RecordID: insert into Employee (name, boss) values ('jack', 11:99 ) insert into Profile (name, friends) values ('Luca', [10:3, 10:4] ) Podobnie w przypadku update dla kolekcji: update Account add addresses = #12:0 update Account remove addresses = #12:0 oraz dla map: update Account put addresses = 'Luca', #12:0 update Account remove addresses = 'Luca'

OrientDB SQL - SELECT Tu również można skorzystać z RecordID: select * from [10:3, 10:4, 10:5] Dla typów zagnieżdżonych mamy operator traverse: select from 11:4 where any() traverse(0,3) (address.city = 'Rome') Istnieje również FIND REFERENCES: find references 5:0 find references 5:0 [Profile,AnimalType] Wynik będzie postaci: RESULT: [6:1,8:2,..]

Linki Blueprints: https://github.com/tinkerpop/blueprints/wiki/ Gremlin: https://github.com/tinkerpop/gremlin/wiki/ GraphQL: http://portal.acm.org/citation.cfm?id=1376660 SPARQL: http://www.w3.org/tr/rdf-sparql-query/ OrientDB SQL: http://code.google.com/p/orient/wiki/sql GraphDB GQL: http://developers.sones.de/wiki/doku.php? id=documentation:gql

Pytania?