Neo4J z Django Mateusz Kieblesz MATURZYSTA INŻYNIER MAGISTER DOCTOR

Slides:



Advertisements
Podobne prezentacje
Graficzny klient SVN graficzny klient SVN integrujący się z powłoką systemu dostępny tylko dla systemu Windows - do pobrania z
Advertisements

Wstęp do strumieni danych
C++ wykład 2 ( ) Klasy i obiekty.
Procedury wyzwalane Procedura wyzwalana (ang. trigger) - stanowi kod użytkownika przechowywany wewnątrz bazy i uruchamiany w określonych sytuacjach np.
Deklaracje i definicje klas w C++ Składowe, pola, metody Konstruktory
Skrypty, procedury przechowywane i wyzwalane
Rafał Hryniów Tomasz Pieciukiewicz
SQL INJECTION Wykorzystanie błędów w językach skryptowych
Bezpieczeństwo wyjątków w C++: OpenGL
PHP + MySQL część II.
Marcin Pamuła Mateusz Stefek
Szablony (wzorce) Przykład 1: Szablon klasy -
XSL Extensible Stylesheet Language 6 listopada 2003.
Plasterkowanie Leszek Mierzejewski.
Licznik template<class Count_Type> class Count { public:
25/08/ Bazy danych II Piotr Górczyński MS Access – Action Query.
20/09/ Języki programowania 1 Piotr Górczyński Kreator form.
18/11/ Języki programowania 1 Piotr Górczyński Łączenie z bazą danych.
Maciej Zabielski 15 stycznia 2003
Model – View - Controler
ODE Triggery. Wstęp n Triggery są trójką zdarzenie-warunek-akcja (event-condition- action). n Zdarzenia mogą być proste lub złożone, co zostanie omówione.
ODE Informacje wstępne. Pojęcia podstawowe n Obiektowa baza danych u język komunikacji u ziarnistość obiektów u identyfikacja obiektów n Transakcja -
BIRT.
Promotor: prof. dr hab. Włodzisław Duch
Obiektowe metody projektowania systemów
Metody autoryzacji użytkowników wymaga integracji z systemem operacyjnym nie wymaga logowania mała pewność mechanizmu wymaga logowania duża pewność mechanizmu.
Obsługa plików csv Do odczytu z pliku csv można użyć następującego kodu: $fp = fopen ("strony.csv","r"); $num = 0; while ($data = fgetcsv ($fp, 1000, ";"))
Bezpieczeństwo Procedury składowane Funkcje i Wyzwalacze
WYZWALACZE (TRIGGERY) Wyzwalacz jest specjalnym rodzajem procedury składowanej, która może być wykonana w odpowiedzi na jedną z trzech sytuacji: UPDATE.
Wykład 8 Wojciech Pieprzyca
Wykład 5 Wojciech Pieprzyca
Java – programowanie obiektowe
Hibernate uzupełnienie
REPOZYTORIA 1. Co to są repozytoria?
Przykład włamania do aplikacji internetowej poprzez modyfikację zapytań SQL Skrypty ASP Serwer bazy danych MS SQL Server Piotr Kuźniacki BDi.
Wprowadzenie do JSP Copyright © Politecnico di Milano September 2003 Translation: Kamil Żyła, Politechnika Lubelska.
Test Doubles Adam Gabryś , v1.1,
dr hab. Ryszard Walkowiak prof. nadzw.
Użytkownicy i przywileje Sesja - przykład Błędy Komunikacja międzyskryptowa Wykład 83PD Technologie internetowe.
SQL - Structured Query Language
Programowanie obiektowe – zastosowanie języka Java SE
Java – coś na temat Klas Piotr Rosik
Dziedziczenie Maciek Mięczakowski
Aplikacje bazodanowe ADO.NET PHP i MySQL
Tworzenie Aplikacji Internetowych
Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 8.
Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 3.
Komendy SQL do pracy z tabelami i bazami
Systemy zarządzania treścią Wykład 5
Program pomiaru systemu SAP SAP Basis Release 6.40
PL/SQL – dalsza wędrówka
Autor: Marta Pelczar. PHP:  Najprostszą drogą, by uruchomić serwer internetowy na własnym domowym komputerze jest skorzystanie z programu XAMPP.
Responsywne aplikacje w Windows 8 i.NET 4.5 Jakub Binkowski.
Paweł Starzyk Obiektowe metody projektowania systemów
.NET i Bazy Danych Projekt: Wadim Grasza.
ŁÓDŹ Budowa cyfrowego archiwum przy pomocy aplikacji IBM DB2 Content Manager Anna Leśniak 18 stycznia 2005.
Object-relational mapping (aka O/RM, ORM, and O/R mapping)
Współpraca PHP i MySQL Wygodniejszym i wydajniejszym sposobem przechowywania i korzystania z danych zapisanych na serwerze jest współpraca z relacyjna.
ASP.NET Dostęp do bazy danych z poziomu kodu Elżbieta Mrówka-Matejewska.
Dominik Benduski Michał Mandecki Podstawy Visual Basic w Excelu.
InMoST, Java – przykładowa aplikacja Bartosz.Michalik
Instalacja klucza HASP.
Visual Basic w programie Microsoft Excel
Dobre praktyki w Django REST Framework
Sieci komputerowe Usługi sieciowe 27/09/2002.
Strukturalny język zapytań SQL - historia
Programowanie obiektowe – zastosowanie języka Java SE
Aplikacje i usługi internetowe
Technologie Informacyjne Bazy danych
Refaktoryzacja czyli odświeżanie kodu
Zapis prezentacji:

Neo4J z Django Mateusz Kieblesz MATURZYSTA INŻYNIER MAGISTER DOCTOR Krok1 krok2 krok3 krok4 Poziom1 Poziom2 Poziom3.1 Poziom3.0 Poziom4 Neo4J z Django Mateusz Kieblesz

O czym będę mówił Co to Neo4J Neo4j i Django Zakończenie

Co to Neo4J Neo4j i Django Zakończenie Neo4J jest grafową bazą danych na licencji GPL zaimplementowaną w Javie. Zalety: Możliwe wywoływanie zapytań rekurencyjnych: wyszukiwanie ścieżki, pokazywanie ścieżki, czyli to co niemożliwe lub bardzo trudne w relacyjnej bazie danych Bardzo wyrafinowane języki zapytań: Gremlin, a w szczególności Cypher Dzięki pakietowi „bulbs” możliwość synchronizacji z relacyjną bazą danych

Co to Neo4J Neo4j i Django Zakończenie Kiedy integrować Neo4j w Django? Potrzebne są wyrafinowane operacje na danych: silniki rekomendacyjne, wyszukiwanie ścieżek, do czego nie nadaje się relacyjna baza danych Główną genezą były problemy jakie można byłoby ominąć, gdyby był udostępniony tego typu system.

Co to Neo4J Neo4j i Django Zakończenie Kiedy integrować Neo4j w Django? Wyszukiwanie ścieżki jaką trzeba przebyć po węzłach, aby dotrzeć do upragnionego miejsca w grafie. Każdy węzeł jest połączony średnio z innymi 50 węzłami. BAZA DANYCH LICZBA WĘZŁÓW/REKORDÓW CZAS WYKONANIA ZAPYTANIA MySQL 1000 2000ms Neo4j 2 ms 1 000 000 Nie udało się uzyskać pomiaru 1 000 000 Główną genezą były problemy jakie można byłoby ominąć, gdyby był udostępniony tego typu system.

Co to Neo4J Neo4j i Django Zakończenie Jak integrować Neo4J w Django Każdy graf można przedstawić w relacyjnej bazie danych za pomocą prostego modelu:

Co to Neo4J Neo4j i Django Zakończenie Jak integrować Neo4J w Django Instalacja swojej aplikacji. Instalacja Neo4j (neo4j.org) Instalacja pakietu „bulbs” (bulbflow.com) Praca na obiekcie umożliwiającego dostęp do grafu. Nadpisanie metod save() oraz delete() modelu, który chcemy aby był reprezentowany przez grafową oraz relacyjną bazę danych oraz dopisanie pól z poprzedniego slajdu. Napisanie zapytania trawersującego graf i wydobywanie danych.

Co to Neo4J Neo4j i Django Zakończenie 1. Instalacja swojej aplikacji. Musimy zaplanować, które modele będziemy chcieli odwzorowywać w relacyjnej jak i w grafowej bazie danych. Musi się znajdować model odwzorowujący węzeł (np. Użytkownik) i połączenie skierowane (np. Lubi, Zna, nie lubi itp.) Przykładowo będziemy chcieli zrobić funkcjonalność „po ilu znajomościach osób mogę dotrzeć do wybranej osoby na świecie”. Class UserProfile(models.Model): user = models.ForeignKey(User) znajomosci = models.ManyToManyField( ’self’, through=’Znajomosc’) Class Znajomosc(models.Model): From= models.ForeignKey(UserProfile) To = models.ForeignKey(UserProfile) status= models.CharField()

Co to Neo4J Neo4j i Django Zakończenie 2. Instalacja Neo4j (neo4j.org). Wchodzimy na strone neo4j.org/download, ściągamy paczkę i i już możemy od razu uruchamiać serwer bazy danych: $”katalog_z_neo4j”/bin/neo4j start Serwer będzie działał na localhost:7474 (fajny panel administracyjny razem z konsolą do testowania zapytań). Musimy mieć zainstalowaną Javę oraz skonfigurowaną zmienną $JAVAHOME, która wskazuje gdzie Java się znajduje.

Co to Neo4J Neo4j i Django Zakończenie 3. Instalacja pakietu „bulbs” (bulbflow.com). Standardowo: $pip install bulbs

Co to Neo4J Neo4j i Django Zakończenie 4. Praca na obiekcie umożliwiającego dostęp do grafu. Aby móc odwołać się do grafowej bazy danych w kodzie musimy utworzyć obiekt: from bulbs.neo4jserver import Graph g = Graph() Wtedy przykładowo: vertice1 = g.verticies.create(name=„dupa1”) vertice2 = g.verticies.create(name=„dupa2”) edge = g.edges.create(vertice1, ’Nie lubi’, vertice2) W ten oto prosty sposób stworzyliśmy dwa węzły no i połączenie między nimi.

Co to Neo4J Neo4j i Django Zakończenie 5. Nadpisanie metod save() oraz delete(). class UserProfile(models.Model): def save(self, *args, **kwargs): g = Graph() data = model_to_dict(self) if self.pk==None: v=g.vertices.create() g.vertices.update(v.eid, data) else: g.vertices.update(self.pk, data) super(UserProfile, self).save(*args, **kwargs) def delete(self): g.client.delete_vertex(self.pk) super(UserProfile, self).delete()

Co to Neo4J Neo4j i Django Zakończenie 5. Nadpisanie metod save() oraz delete(). class Znajomosc(models.Model): def save(self, *args, **kwargs): g = Graph() data = model_to_dict(self) if self.pk==None: v1 = g.vertices.get(self.From.id) v2 = g.vertices.get(self.To.id) e = g.edges.create(v1, self.status, v2) else: e = g.edges.get(self.pk) g.edges.update(e.eid, data) super(Znajomosc, self).save(*args, **kwargs) def delete(self): g.client.delete_edge(self.pk) super(Znajomosc, self).delete()

Co to Neo4J Neo4j i Django Zakończenie 6. Napisanie zapytania trawersującego graf i wydobywanie danych. Teraz musimy tylko napisać zapytanie do wyłaniania danych z grafu np.: „g.v(_id).out('Zna').loop(1){it.object.out('Zna').count()!=0}{it.object.getPro perty('name')== nazwa_szukanego_użytkownika}'.paths” To zapytanie zwróci wszystkie ścieżki znajomości wychodzące użytkownika o id = _id do użytkownika o imieniu „nazwa_szukanego_użytkownika”. (nie testowałem ale powinno działać) Więcej o zapytaniach na: https://github.com/tinkerpop/gremlin/wiki/ lub http://www.youtube.com/watch?v=5wpTtEBK4-E

Co to Neo4J Neo4j i Django Zakończenie 6. Napisanie zapytania trawersującego graf i wydobywanie danych. Teraz dane zapisują się do grafowej i relacyjnej. Zostało nam tylko wywołać zapytanie w kodzie. Załóżmy że chcemy zapewnić wcześniej omawianą funkcjonalność. Stwarzamy naszą metodę w menagerze modelu: def get_path_to_user(self, g, *args, **kwargs): """ Method which returns a list of directory in which is given se return type: list #skrypt z zapytaniem w oddzielnym pliku (gremlin.groovy) script = g.scripts.get('get_path_to_user') params = dict(_id=kwargs.pop('pk'), nazwa_szukanego_użytkownika=kwargs.pop(‚name’)) gremlin_result = g.gremlin.execute(script, params) #funckja obrabiająca resultat zapytania (być może da się to bardziej elegancko #zrobić lecz nie próbowałem) i zwracająca ścieżki złożone z imion użytkowników #(bez użytkownika z którego rozpoczęliśmy trawersować graf) context = create_multilist_context(g, gremlin_result, reverse=False) return context

Co to Neo4J Neo4j i Django Zakończenie 6. Napisanie zapytania trawersującego graf i wydobywanie danych. Teraz dane zapisują się do grafowej i relacyjnej. Zostało nam tylko wywołać zapytanie w kodzie. Załóżmy że chcemy zapewnić wcześniej omawianą funkcjonalność. Stwarzamy naszą metodę w menagerze modelu: def create_multilist_context(g, gremlin_result, reverse): multi_dict_list = [] for k in gremlin_result.results: dictlist = [] for l in k.raw: vertice_id = int(l.get('self').split('http://localhost:7474/db/data/node/')[1]) name = l.get('data').get('name') dictlist.append(dict(pk=vertice_id, name=name)) #odwracanie kolejności ścieżki jeżeli wskazane if reverse==True: dictlist = dictlist[1:] dictlist.reverse() multi_dict_list.append(dictlist) else: multi_dict_list.append(dictlist[1:]) return multi_dict_list

Co to Neo4J Neo4j i Django Zakończenie UUUFFF udało się 

Co to Neo4J Neo4j i Django Zakończenie Szybka demonstracja