Graph databases - why and how
O mnie Chief Architekt w Architekt i TeamLeader w jednym z największych projektów w .NET w Polsce Zajmuję się systemami rozproszonymi i tym co można wywnioskować z danych Po godzinach No i można mnie spotkać na rekrutacji IndexOutOfRange.com @maklipsa
Agenda - Grafy Bazy grafowe Wydajność Zastosowania Neo4j i Cypher – demo Kiedy stosować IndexOutOfRange.com @maklipsa
Graf IndexOutOfRange.com @maklipsa
Graf G=(E,V) IndexOutOfRange.com @maklipsa Leonhard Euler - 1736 Królewiec (obecny Kaliningrad) G=(E,V) IndexOutOfRange.com @maklipsa
Graf IndexOutOfRange.com @maklipsa Leonhard Euler - 1736 Królewiec (obecny Kaliningrad) IndexOutOfRange.com @maklipsa
Graf IndexOutOfRange.com @maklipsa Leonhard Euler - 1736 Królewiec (obecny Kaliningrad) IndexOutOfRange.com @maklipsa
Graf IndexOutOfRange.com @maklipsa Leonhard Euler - 1736 Królewiec (obecny Kaliningrad) IndexOutOfRange.com @maklipsa
Odrobina historii
Historia baz relacyjnych 1970 – Edgar F. Codd – model relacyjny Co innego działo się latach 70? Znaczący spadek ceny pamięci RAM – tylko 734$ za 1 MB IBM 3310 oferuje 100MB dyski 1971 Intel 4004 – 740kHz, 8 bitów Cena – 5 lat temu wynosiła 2642$ Intell 4004 4004 – 740Mhz, 8008 – 800khz, Co z tego wynika? Relacje w bazach relacyjnych były po to by zaoszczędzić miejsce. Formy normalne Efektem tego jest, że bazy relacyjne skaluje się wzwyż, czyli dodając procesorów i pamięci na jednej maszynie 1974 Intel 8008 – 800kHz, 16 bitów, 1MB pamięci 1977 powstaje Oracle, apple 1 1978 Intel 8086 – 4MHz- 10MHz IndexOutOfRange.com @maklipsa
Historia baz grafowych 1736 – Problem mostów 1852 – Problem pokolorowania mapy 1936 – Książka „Teoria Grafów” 1948 – ENIAC 1969 – Częściowe rozwiązanie problemu mapy 1994 – Rozwiązanie problemu mapy 2002 – Pentium 4 3,8GHz 2003 – Pierwsze komercyjne bazy grafowe IndexOutOfRange.com @maklipsa
Stan obecny Procesowanie Przechowywanie Natywne Natywne Procesowanie, a niekoniecznie wyszukiwanie Jest ich dużo. Ja znam 3 bazy relacyjne – SQL Server, Oracle, MySql. No i Postgres, który stara się być relacyjno – obiektowy FlockDB – baza grafowa dla ubogich – pobiera tylko bezpośrednie dzieci InfiniteGraph – baza w której to miejsce przechowywania jest klastrowane, a nie sama baza. Microsoft graph engine (Projekt trinity) – rozproszona baza klucz wartość, bez języka wyszukiwania Titan – ognostyczne względem bazy (Casandra/Hbase) oparty na enginie grafowym od apache Affinity – storzona z myślą o IoT OrientDB – ulubieniec baza grafowa, dokumentowa, klucz/wartość i obiektowa , no i wspierają zapytania SQL – więcej mieć nie można . Kierowana do olbrzymich grafów. *dex (teraz Sparksee) – dostępna nawet na iOS i Androida. Baza o małej latencji Neo4j – baza z możliwością rozproszenia, grafowy silnik przechowywania, SQL-owy jezyk zapytań. AllegroGraph – implementacja standardu W3(tych od internetu) RDFS (czyli pomysłu na oznaczenie semantyczne każdego linku w internecie) HypergroupDB – baza stworzna z myślą o przetwarzaniu wiedzy Przechowywanie Natywne IndexOutOfRange.com @maklipsa
Zastosowania
Pranie brudnych pieniędzy IndexOutOfRange.com @maklipsa
Podpowiedzi IndexOutOfRange.com @maklipsa
Rozpoznawanie języka naturalnego IndexOutOfRange.com @maklipsa
Rozpoznawanie języka naturalnego MATCH (person:Person)–[:IS_FRIEND_OF]->(friend), (friend)–[:LIKES]->(restaurant), (restaurant)–[:LOCATED_IN]->(loc:Location), (restaurant)–[:SERVES]->(type:Cuisine) WHERE (person.name = ’Philip’ AND loc.location=’New York’ AND type.cuisine=’Sushi’ RETURN restaurant.name IndexOutOfRange.com @maklipsa
Rozpoznawanie języka naturalnego IndexOutOfRange.com @maklipsa
New York Times - apple Jabłko Apple inc. Produkty Tim Cook Film (y) Gatunki Właściwości odżywcze Dane handlowe Firmy handlujące Apple inc. Pracownicy Firmy powiązane Produkty Tim Cook Film (y) Odcinek Star Trek Apple Records Rosyjska partia ... IndexOutOfRange.com @maklipsa
New York Times IndexOutOfRange.com @maklipsa
Cookit IndexOutOfRange.com @maklipsa Recipe i Ingredient jako główne encje Bulion i risotto grzybowe z truflami IndexOutOfRange.com @maklipsa
Wydajność
Wydajność – można inaczej Relacyjne Grafowe IndexOutOfRange.com @maklipsa
Wydajność – trawersowanie IndexOutOfRange.com @maklipsa
Wydajność – trawersowanie IndexOutOfRange.com @maklipsa
Wydajność – trawersowanie IndexOutOfRange.com @maklipsa
Wydajność – trawersowanie IndexOutOfRange.com @maklipsa
Wydajność – przechowywanie Pamięciowe Rozmiar grafu jest ograniczony przez RAM Dużo algorytmów grafowych i doskonała wizualizacja Dyskowe Rozmiar grafu jest ograniczony przez dysk Zoptymalizoweane do grafów atrybutowych Klastry Ograniczony przez sumę pamięci RAM klastra Zoptymalizowane na algorytmy rozproszone IndexOutOfRange.com @maklipsa
Wydajność – testy Twitter z 2009 roku Operacje 1,67 miliarda obserwowań 41,7 milionów userów Operacje Tworzenie kont – 1% Publikowanie tweetów – 15% Oczyt – 76% Rekomendacje – 7% IndexOutOfRange.com @maklipsa
Wydajność – testy Przechowywanie danych Obliczenia 6 c1.4xl Nodów Casandry Obliczenia 40 m1.small Obsługa transakcji i zapytań Titan c1.4xl – 4x 2.9 i 7.5 Gb Ramu m1.small – niemal najmniejszy serwer amazonowy – 2.5 2GB Ramu IndexOutOfRange.com @maklipsa
Wydajność – testy Typ transakcji Liczba trx Ważona czasu Std czasu Tworzenie konta 379,019 115,15ms 5,88ms Tweetowanie 7,580,955 18,54ms 6,34ms Odczyt 37.936,184 6,29ms 1,62ms Rekomendacje 3.793,863 67,65ms 13,89ms Total 49.690,061 Czas trwania 2,3h Średnia 5.900 trx/sek Peek 10,300 trx/sek Kosztowało – 11$ za godzinę IndexOutOfRange.com @maklipsa
Neo4j
Neo4j db-engines.com – 20 pozycja, 1 w bazach grafowych Drivery dla: Java .NET JavaScript Python Ruby PHP and R, Go, Clojure, Perl, Haskell Cypher jako standard Jest wersja darmowa Algorytmy grafowe powstwały na super komputery Bazy grafowe powstawały do skalowania wszerz nie wzwyrz IndexOutOfRange.com @maklipsa
Demo
Wydajność – testy Kiedy stosować: Kiedy NIE stosować: Dane hierarchiczne Ważniejsze są relacje, niż atrybuty obiektów Wyszukiwanie wzorów w danych Do lepszej wizualizacji danych Wyciągnąć sens z danych Kiedy NIE stosować: Systemów gdzie ważniejsze są atrybuty obiektów niż relacje Uwaga z ACIDowe transakcje Zamiast baz reacyjnych Zamiast baz relacyjnych – nie. Jako uzupełnienie - tak IndexOutOfRange.com @maklipsa
Pytania?