sones graph database in the cloud
TRANSCRIPT
Confidential sones GmbH| 11/30/2010 1
Daniel Kirstenpfad / sonesCTO / Founderwww.sones.com - @sones
GraphDB in der Wolke
Confidential sones GmbH| 11/30/2010 1
In den letzten 35 Jahren waren Informationen strukturiert und in Tabellenform in
geschlossenen Datenbanken -Silos eingesperrt.
2
Confidential sones GmbH| 11/30/2010 1
Relationale Datenmodelle und damit SQL sind ein limitierender Faktor (Performance,
Komplexität) für hochverknüpfte Daten.
3
== Graph Daten
Confidential sones GmbH| 11/30/2010 1
Applikationen können auf unbekannte
relationale Daten nicht zugreifen, sie nicht verstehen und
verarbeiten.
4
Datenbank 1 Datenbank 2
Applikation 1 Applikation 2
? ?
Confidential sones GmbH| 11/30/2010 15
BobID = 2
Alter = 32
AliceID = 1
Alter = 21
Vertex
Edge
Freunde
seit = 2007/05/20bis = 2010/11/04
Edge-
Properties Vertex-
Properties
Property Graph
Confidential sones GmbH| 11/30/2010 16
ID 1TYPE PersonREVISION 20101104…
Name AliceAlter 21
PartnerFeinde
Lieblingsfarbe Rot, Grün
Adresse.Straße Eugen-Richter-StraßeAdresse.Stadt Erfurt
BobID = 2
Alter = 32
MalloryID = 3
Alter = 33
Direkte
Verknüpfung
ohne externen
Index
Edge-Properties
Property Graph
Confidential sones GmbH| 11/30/2010 1
7
ID ID 1rdf:type TYPE Personsones:revId REVISION 20101104…
foaf:name Name Alicefoaf:age Alter 21
sones:person Partners:set<person> Feinde
List<string> Lieblingsfarbe Rot, Grün
gn:street Adresse.Straße Eugen-Richter…gn:town Adresse.Stadt Erfurt
BobID = 2
Alter = 32
MalloryID = 3
Alter = 33
Oscar
• Eindeutige Identifikationsmöglichkeit• Benannte Verknüpfungen• Eng Angelehnt an RDF Molecules
Property Graph
Confidential sones GmbH| 11/30/2010 1
8
REST
Hypermedia
GraphDB
• Kanten und Knoten sind Resourcen
• Zugriff über
http://test.com/vertices/[$id]
• CRUD Operationen (GET, POST, PUT…)
• Atomizität• Statusfrei• Idempotenz• Parallel
• Repräsentation muss mit Links
umgehen können
• z.B. XML+XLINK, ATOM,…
• Repräsentation sollte
selbstbeschreibend sein
Property Graph
Confidential sones GmbH| 11/30/2010 1
von relationalen Schemata..
� Relationale Schemata sind unflexibel– teure ALTER TABLE Operationen– Entity-Attribute-Value Modell RDF– keine semi-/unstrukturierten Daten
• XML, JSON, … Hierarchien, Graphen, Binärdaten– keine Attribut Mengen
• LIST<String>, SET<Integer>, SET<Person>– keine einfache Möglichkeit für versionierte Daten
9
Confidential sones GmbH| 11/30/2010 1
Anti-Patterns
� Relationen über foreign-key-constraints– kein explizites Konzept für Relationen– keine Indexfreien Zugriffe (Adjazenz)
� Relationale Daten über JOINs anzufragen = komplex– nur Speichern war noch nie die Herausforderung
� keine rekursiven JOINs– Ineffiziente Query Abarbeitung
10
Confidential sones GmbH| 11/30/2010 1
Ist SQL „cloud-ready“ ?
� Keine explizite Skalierung oder Partitionierung innerhalb des relationalen Datenmodells
� Keine JOINs zwischen verschiedenen Datenbanken� SQL spielt nicht gut mit state-of-the-art Web
Technologien zusammen– HTTP/REST, Hypermedia, Semantic Web
11
Confidential sones GmbH| 11/30/2010 1
Vorteile einer Graphendatenbank
� explizites Graph Datenmodell– höherer Abstraktionsgrad– besseres Verständnis des Domänenmodells
� Konsistenzkriterien und Indices– einfache Attribute bis zu komplexen Graphenstrukturen
� Verknüpfte Informationen traversieren� kürzeste Pfade finden� semantische Partitionierung von Daten� Gute Integration in state-of-the-art Programmierkon zepte und
Webtechnologien� Empfehlungssysteme und Datenerforschung von potenti ell
interessanten verknüpften Informationen
12
persönlich sozial Gegenstände
Confidential sones GmbH| 11/30/2010 1
sones GraphDB
� URL http://www.sones.com� Lizenz AGPLv3 und proprietär kommerziell� Sprache C# 4.0 / .NET 4.0� Ziele Management von verknüpften Daten� Concurrency MVCC� Replikation Peer 2 Peer� Persistenz proprietäres Dateisystem� Cloud Microsoft Windows Azure
13
Confidential sones GmbH| 11/30/2010 1
Azure Cloud Deployment
14
DEMO
Confidential sones GmbH| 11/30/2010 1
sones Architekturübersicht
15
GraphDSREST, WebShell, C# API
GraphDBGQL, Graph Traversals, Indices
GraphFS
Objekt Management, Objekt (De-)Serialisierung
Host File System / Microsoft Azure
Confidential sones GmbH| 11/30/2010 1
sones Architekturübersicht
16
Speichermedium
Lokales DateisystemNetzspeicher / Cloud Storage
(Windows Azure)In-Memory
GraphFS
Objektmanagement Objekt (De-)Serialisierung
GraphDB
Anfragesprache Typmanagement Knotenmanagement Operative LogikIndex (Dictionary,
B+Tree)
GraphDS
REST WebShell WebDAV C# API Java API
Confidential sones GmbH| 11/30/2010 1
Skalierung
17
User
GraphDS 1
GraphDS 2
GraphDB 2
GraphDB 1
GraphFS 2
GraphFS 1
Confidential sones GmbH| 11/30/2010 1
sones Property-Hypergraph
18
Person Freund BobID = 2
Alter = 23seit = 2009/09/21
Person Freund CarolID = 3
Alter = 20seit = 2010/04/11
SET<Person> Freunde
SetMaxNumber = 12
AliceID = 1
Alter = 21
Hyperedge-Properties
Hyperedge
Edge
Virtual -Edge
Confidential sones GmbH| 11/30/2010 1
sones Property-Hypergraph
� Properties können auch Code (als Daten) enthalten– wie Stored Procedures– C#: Func<…>, ExpressionTrees
� Hyperedge erlaubt Berechnungen entlang einer Reihe v on Edges– GetMinWeight– SetMaxNumber– …
19
Confidential sones GmbH| 11/30/2010 1
sones Graph Query Language
20
FROM Person SELECT Person.Freunde.Freunde.Name
� „SQL for Graphen“� intuitive DSL für Ad -Hoc queries� ermöglicht benutzerfreundliche Abfragen� Funktionen und Aggregate sind typsicher und
können durch eigene Plug-Ins erweitert werden
– SELECT COUNT(Person.Freunde)– SELECT Person.Freunde.Random(2)– SELECT Person.Freunde.Name.Substring(2,5)
Confidential sones GmbH| 11/30/2010 1
sones Graph Query Language
21
CREATE VERTEX PersonADD ATTRIBUTES (String Name, SET<Person> Freunde)INDICES (Name)MANDATORY (Name)
INSERT INTO Person VALUES (Name = "Alice")INSERT INTO Person VALUES (Name = "Bob")
LINK Person(Name = ‘Alice') VIA Freunde TO Person(Name = ‘Bob')LINK Person(Name = ‘Bob') VIA Freunde TO Person(Name = ‘Alice‘)
Confidential sones GmbH| 11/30/2010 1
Graph Query Language
22
DEMO
Confidential sones GmbH| 11/30/2010 1
sones C# API
23
var _Person = _GraphDB.TypeManager.
CreateVertex(„Person“).
AddString(„Name“, mandatory: true, indexed: true).
AddLoop(„Freunde”, hyperEdge: true).
execute();
Type _PersonT = _GraphDB.TypeManager.
GenerateType(_Person);
Confidential sones GmbH| 11/30/2010 1
sones C# API
24
Person _Alice = _GraphDB.TypeManager.ActivateVertex(
_Person, new VertexUUID(1));
_Alice.Name = „Alice“;
dynamic _Alice2 = _Alice;
_Alice.Alter = 21;
_Alice.bdayparty = (Action) (() => { _Alice.Age++; });
_Alice.bdayparty();
Confidential sones GmbH| 11/30/2010 1
sones C# API
25
var _Freunde = new GraphAttribute(„Freunde“, Type:„foa f:knows“);
var _Bob = _GraphDB.TypeManager.ActivateVertex (_Person, new VertexUUID(2));
_Alice.Link(_Freunde, _Bob);_Bob.Link(_Freunde, _Alice);
Confidential sones GmbH| 11/30/2010 1
sones C# API
26
Public T TraverseVertex<T> (
IVertex myStartVertex,
TraversalOperation TraversalOperation =
TraversalOperation.BreathFirst,
Func<IVertex, IEdge, Boolean> myFollowThisEdge = null,
Func<IVertex, Boolean> myMatchEvaluator = null,
Action<IVertex> myMatchAction = null,
Func<TraversalState, Boolean> myStopEvaluator = null,
Func<IEnumerable<IVertex>, T> myWhenFinished = null)
{
// Traverse the graph
}
Confidential sones GmbH| 11/30/2010 127
Alexander OellingFounder / Business [email protected]: Alexander_Oelling
Daniel KirstenpfadFounder / [email protected]: Daniel_Kirstenpfad
sones GmbHEugen -Richter-Strasse 4499085 Erfurt
+49-361-3026250
Kontakte knüpfen