DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...
sones GraphDB + Mono + Linux
1. Graphen auf Linux GraphDB + Mono + Linux Daniel Kirstenpfad sones GmbH Schillerstrasse 5 04109 Leipzig
2. Überblick Was ist ein Graph? GraphDB von sones das Mono Projekt Anwendungsfälle Demo 2
3. Was ist ein Graph? Knoten + Kanten ungerichteter Graph Beispiel: Strassenkarte Alle Knoten haben den gleichen „Typen“ Alle Kanten „bedeuten“ die gleiche Art von Beziehung Alle Beziehungen sind symetrisch 3 Knoten 1 Knoten 2 Knoten 3 Knoten 4
4. Was ist ein Graph? Gerichtete Kanten ergeben einen gerichteten Graphen Beispiele: Twitter, href-Beziehungen im Web Alle Knoten haben den gleichen „Typen“ Alle Kanten „bedeuten“ die gleiche Art von Beziehung Alle Beziehungen sind asymetrisch 4 Knoten 1 Knoten 2 ist Freund von ist Freund von Knoten 3 Knoten 4 ist Freund von
5. „Single Relational Structures“ Solange man innerhalb eines Graphen immer nur einen Bedeutung für alle Kanten hat spricht man von „Single Relational Structures“ 5 Knoten 1 Knoten 2 ist Freund von ist Freund von Knoten 3 Knoten 4 ist Freund von
6. Property Graph und Ontologien Knoten und Kanten des Property Graphen liegt eine Objekt-Ontologie zugrunde Property Graph Knoten und Kanten haben key/value Properties (Attribute) 6 Name = String Gewicht = Integer Alter = Integer Name = String Datum = DateTime Sender = SenderType befreundet S01E01 Name = Homer Simpson Auftritt Name=S01E01 Datum=01.01.1991 Sender=ZDF Alter=40 Gewicht=131
7. Warum GraphDB? Man kann eine „etwas steht in einer Beziehung mit etwas“ in fast jeder Datenbank modellieren 7 1 4 XML <graphml> <graph> <node id=1 /> <node id=2 /> <node id=3 /> <node id=4 /> <edge source=1 target=4 /> <edge source=1 target=2 /> <edge source=2 target=3 /> </graph> </graphml> 2 3 JSON { 1 : { nach : [4,2] } 2 : { nach : [3] } } SQL
8. Warum GraphDB? Man kann eine „etwas steht in einer Beziehung mit etwas“ in fast jeder Datenbank modellieren Probleme: „Teure“ JOINs (was passiert bei Milliarden von Verbindungen?) Index Lookups um herauszufinden welche Knoten verbunden sind 8 1 4 2 3
9. GraphDB von sones Seit 30.06.2010 OpenSource unter AGPLv3 http://github.com/sones/sones Seit dieser Woche in Version 2.0 verfügbar performante modulare GraphDB Property Graph + minimale Ontologie frei definierbare Attribute an Objekten, Vererbung von Attributen (~OOP) Offene Schnittstellen zur Plug-In Entwicklung SQL ähnliche, einfache Anfragesprache „GQL“ REST Schnittstelle (XML, JSON) leistungsfähige API mit Languagebindings für C#, Java, Javascript, PHP Platformunabhängig dank des Mono Projects 9
10. das Mono Projekt Open Source Implementierung der CommonLanguage Runtime (CLR) von .NET Binärkompatibel mit Microsoft.NET Open Source Implementierung des größten Teils der .NET Klassenbibliothek .NET 1.1, 2.0, 3.5, 4.0 Platformunabhängig Linux, Windows, Mac OSX, BSD, Solaris,... Unterstützung weiterer Programmiersprachen wie z.B. F# (Funktionale Programmierung) http://www.mono-project.com/ http://github.com/mono 10
11. GraphDB auf Mono GraphDB stellt hohe Anforderungen an Mono GarbageCollector muss performant und stabil funktionieren Viele parallel laufende Prozesse (Parallel Framework, Lock Free Data Structures,...) 11
13. Beispiel: „Wortschatz Leipzig“ Relationale Datenbank vs. GraphDB Über 26 Mio. Rows in 4 Tabellen sind reine Relationendaten 13
14. Beispiel: „Wortschatz Leipzig“ 14 MySQL Query SELECT w.word AS wort, k.sigAS sig FROM co_sk, words w WHERE k.w1_id=(SELECT w_id FROM words w WHERE word = “Laptop”) AND k.w2_id=w.w_idORDER BY k.sigDESC LIMIT 10;
15. Beispiel: „Wortschatz Leipzig“ 15 MySQL Query SELECT w.word AS wort, k.sigAS sig FROM co_sk, words w WHERE k.w1_id=(SELECT w_id FROM words w WHERE word = “Laptop”) AND k.w2_id=w.w_idORDER BY k.sigDESC LIMIT 10; GQL Query FROM Word SELECT Cooccurrences.TOP(10) WHERE Content = ‘Laptop’;