SlideShare una empresa de Scribd logo
1 de 38
Descargar para leer sin conexión
A Common Graph
                      Database Access Layer
                                                          for .NET and Mono




Achim Friedland <achim@graph-database.org>, Aperis GmbH                       FOSDEM 2011 - Mono devroom
Graphs




Any structure having vertices and edges...
                                             2
...but different representations possible.




Adjacency matrix vs. Incidence matrix vs. Adjacency list vs.
Edge list vs. Classes, Index-based vs. Index-free Adjacency,
Dense vs. Sparse graphs, On-disc vs. In-memory graphs...

                                                               3
The problem...

• Different graph representations...
  • have different levels of expressivity
  • can be very application specific
  • hard to optimize a single one for every
      use-case
•   Multiple APIs from different vendors


                                              4
So, where to find a common API?




                                 5
Graph Commons

• Edges are first-class citizens
• Information gathering by traversing
  Indices are less important than in relational DBs

• Index-free adjacency, so the cost of
  traversing an edge is in-depended from the
  size of the graph
  ( ...at least when you ignore the GC ;)




                                                      6
The Property-Graph Model
               The most common graph model within
                    the NoSQL GraphDB space

                                             edge label
              Id: 1                                         Id: 2
                                  Friends
         name: Alice                                      name: Bob
                             since: 2009/09/21
             age: 21                                       age: 23
                                  edge
  vertex
                                properties
properties

•   directed:          Each edge has a source and destination vertex
•   attributed:        Vertices and edges carry key/value pairs
•   edge-labeled:      The label denotes the type of relationship
•   multi-graph:       Multiple edges between any two vertices allowed
                                                                         7
A Property Graph Model Interface for .NET and Mono

// Use a class-based in-memory graph
var graph = new InMemoryGraph();

var v1 = graph.AddVertex(new VertexId(1));
var v2 = graph.AddVertex(new VertexId(2));
v1.SetProperty("name", "Alice");
v1.SetProperty("age" , 21);
v2.SetProperty("name", "Bob");
v2.SetProperty("age" , 23);

var e1 = graph.AddEdge(v1, v2, new EdgeId(1), "Friends");
e1.SetProperty(“since”, ”2009/09/21”);



                                                            8
Or, if you prefer the Dynamic Language Runtime...

// Use a class-based in-memory graph
var graph = new InMemoryGraph();

var v1    = graph.AddVertex().AsDynamic();
var v2    = graph.AddVertex().AsDynamic();
v1.name   = "Alice";
v1.age    = 21;
v2.name   = "Bob";
v2.age    = 23;

var e1 = graph.AddEdge(v1, v2, "Friends").AsDynamic();
e1.since = ”2009/09/21”;



                                                         9
Current status...


• About 70% of the current JAVA original
• e.g. Transactions, Auto-Indexing still missing
• Expect first release within the next 4-6 weeks




                                                   10
The future...

• Different implementations for different
  graph representations
• Implementations for remote graphs
  (Rexster and Neo4J REST in separate projects)

• Extensions, e.g. for semantic graphs



                                                  11
Ok, but how to query a property-
            graph?




                                   12
A data flow framework for property graph models

                          : IEnumerator<E>, IEnumerable<E>




      S            AbstractPipe<S, E>                        E

Source Elements                                    Emitted Elements




                                                                      13
A simple pipe yielding all objects without modification

public class IdentityPipe<S> : AbstractPipe<S, S> {
    public override Boolean MoveNext() {
        if (_InternalEnumerator == null)
            return false;
        if (_InternalEnumerator.MoveNext()) {
            _CurrentElement = _InternalEnumerator.Current;
            return true;
        }
        return false;
    }
}




                                                             14
A simple pipe yielding all strings turned to uppercase

public class ToUpperPipe<String> : AbstractPipe<String, String> {
     public override Boolean MoveNext() {
         if (_InternalEnumerator == null)
             return false;
         if (_InternalEnumerator.MoveNext()) {
             _CurrentElement = _InternalEnumerator.Current.ToUpper();
             return true;
         }
         return false;
     }
}




                                                                        15
A simple pipe yielding the vertex property “name”

public class GetNameProperty : AbstractPipe<IVertex, String> {
    public override Boolean MoveNext() {
        if (_InternalEnumerator == null)
            return false;
        if (_InternalEnumerator.MoveNext()) {
            _CurrentElement = _IVertex.GetProperty(“name”);
            return true;
        }
        return false;
    }
}




                                                                 16
Allow the creation of state or side effects within a pipe




   S       ISideEffectPipe<in S, out E, out T>               E
 Source                                                   Emitted
Elements                       T                          Elements

                           Side Effect



                                                                     17
Count the total number of elements passed through the pipe

public class CountPipe<S> : AbstractPipe<S,S>, ISideEffectPipe<S,S,Int64 {
    [...]
    public override Boolean MoveNext() {
          if (_InternalEnumerator == null)
              return false;
          if (_InternalEnumerator.MoveNext()) {
              _CurrentElement = _InternalEnumerator.Current;
              Interlocked.Increment(ref _Counter);
              return true;
          }
          return false;
      }
      public Int64 SideEffect { get { return _Counter; }}
}


                                                                             18
Create complex pipes by combining pipes to pipelines




   S                      Pipeline<S, E>                 E
             pipe1<S,A>     pipe2<B,C>   pipe3<C,E>
 Source                                               Emitted
Elements                                              Elements




                                                                 19
A data flow framework for property graph models

// Friends-of-a-friend
var pipe1 = new VertexEdgePipe(VertexEdgePipe.Step.OUT_EDGES);
var pipe2 = new LabelFilterPipe("Friends", ComparisonFilter.EQUALS);
var pipe3 = new EdgeVertexPipe(EdgeVertexPipe.Step.IN_VERTEX);
var pipe4 = new VertexEdgePipe(VertexEdgePipe.Step.OUT_EDGES);
var pipe5 = new LabelFilterPipe("Friends", ComparisonFilter.EQUALS);
var pipe6 = new EdgeVertexPipe(EdgeVertexPipe.Step.IN_VERTEX);
var pipe7 = new PropertyPipe("name");

var pipeline = new Pipeline(pipe1,pipe2,pipe3,pipe4,pipe5,pipe6,pipe7);
pipeline.SetSource(new SingleEnumerator(
                   graph.GetVertex(new VertexId(1))));

foreach (var _foaf in pipeline.Take(5)) {
  Console.WriteLine(_foaf);
}



                                                                          20
A data flow framework for property graph models



• Think of “LINQ for graphs”
• ...but without the syntactic sugar.
• Very Powerful, but also very “noisy” :(



                                                    21
Current status & the future



• About 95% of the current JAVA original
• Expect first release with the next weeks




                                            22
And what about ad hoc querying for
   exploring a property-graph?




                                     23
Ad hoc Query Language for graphs




• Ad Hoc querying a property graph
• User-friendly wrapper around pipes
• “perl for graphs” ;)



                                           24
Ad hoc Query Language for graphs

// Friends-of-a-friend
var pipe1 = new VertexEdgePipe(VertexEdgePipe.Step.OUT_EDGES);
var pipe2 = new LabelFilterPipe("Friends", ComparisonFilter.EQUALS);
var pipe3 = new EdgeVertexPipe(EdgeVertexPipe.Step.IN_VERTEX);
var pipe4 = new VertexEdgePipe(VertexEdgePipe.Step.OUT_EDGES);
var pipe5 = new LabelFilterPipe("Friends", ComparisonFilter.EQUALS);
var pipe6 = new EdgeVertexPipe(EdgeVertexPipe.Step.IN_VERTEX);
var pipe7 = new PropertyPipe("name");

var pipeline = new Pipeline(pipe1,pipe2,pipe3,pipe4,pipe5,pipe6,pipe7);
pipeline.SetSource(new SingleEnumerator(
                   graph.GetVertex(new VertexId(1))));



       g:id-v(1)/outE[@label='Friends']/inV/outE
             [@label='Friends']/inV/@name
                                                                          25
Current status & the future



• Reimplementation not yet started :(
• Will probably be based on the DLR
• Expect first release with the next 2-3 months




                                                 26
But...



• Do not expect Gremlin as the one-and-only
  query language for each use-case!
• More application specific Query Languages
  could be implemented using pipes
  e.g. sones GQL, OrientDB SQL




                                              27
How to access a remote graph?
How to expose a graph via the network?




                                         28
A HTTP/REST interface for
            Blueprints Property Graph Models


• Exposes your application-embedded Blueprints
 graph via HTTP/REST
• Vertices and edges are REST resources
• The rexster client library allows you to access most
 JAVA-based GraphDBs
 Neo4J, OrientDB available; DEX, InfiniteGraph coming soon...



                                                               29
Common CRUD Operations...




                            30
Common CRUD Operations...




                            31
Common CRUD Operations...




                            32
Default resource representation: JSON


curl -H Accept:application/json http://localhost:8182/graph1/vertices/1
{
  "version" : "0.1",
  "results" : {
     "_type" : "vertex",
     "_id"   : "1",
     "name" : "Alice",
     "age"   : 21
  },
  "query_time" : 0.014235
}




                                                                          33
Current status



• About 60% of the current JAVA original
• Expect first release with the next 3-4 weeks
• Rexster Shell might take some more time...




                                                34
Future Resource Representations


• Link-aware, self-describing hypermedia (see Neo4J)
   • e.g. ATOM, XML + XLINK, RDFa
• Application specific protocols
   • GEXF for exporting a graph to GEPHI
   • GraphML/GDF/... graph formats
   • MediaRSS your photo graph traversal via Cooliris


                                                        35
The GraphDB Graph...

          OrientDB for Documents    ThinkerGraph &
                                   Gremlin for Ad Hoc


InfiniteGraph for                                   Neo4J for GIS
   Clustering




  InfoGrid for WebApps                    In-Memory for
                                             Caching



      OrientDB for Ad Hoc
                                             Neo4J for HA

                                                               36
Still hungry for more?


FOSDEM 2011 GraphDB dinner!
Meet us in front of Le Roy d’Espagne
Grand Place 1, Brussels
20:00 PM




                                       37
Questions?

 http://www.graph-database.org
http://www.twitter.com/graphdbs




                                  38

Más contenido relacionado

La actualidad más candente

Ankara Jug - Practical Functional Programming with Scala
Ankara Jug - Practical Functional Programming with ScalaAnkara Jug - Practical Functional Programming with Scala
Ankara Jug - Practical Functional Programming with ScalaEnsar Basri Kahveci
 
Scala: functional programming for the imperative mind
Scala: functional programming for the imperative mindScala: functional programming for the imperative mind
Scala: functional programming for the imperative mindSander Mak (@Sander_Mak)
 
Systematic Generation Data and Types in C++
Systematic Generation Data and Types in C++Systematic Generation Data and Types in C++
Systematic Generation Data and Types in C++Sumant Tambe
 
C++ 11 Features
C++ 11 FeaturesC++ 11 Features
C++ 11 FeaturesJan Rüegg
 
C++11: Feel the New Language
C++11: Feel the New LanguageC++11: Feel the New Language
C++11: Feel the New Languagemspline
 
Introduction to Functional Programming with Scala
Introduction to Functional Programming with ScalaIntroduction to Functional Programming with Scala
Introduction to Functional Programming with Scalapramode_ce
 
Fun with Lambdas: C++14 Style (part 2)
Fun with Lambdas: C++14 Style (part 2)Fun with Lambdas: C++14 Style (part 2)
Fun with Lambdas: C++14 Style (part 2)Sumant Tambe
 
Introduction to programming in scala
Introduction to programming in scalaIntroduction to programming in scala
Introduction to programming in scalaAmuhinda Hungai
 
Gentle introduction to modern C++
Gentle introduction to modern C++Gentle introduction to modern C++
Gentle introduction to modern C++Mihai Todor
 
Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)Jonas Bonér
 
Practical Aggregate Programming in Scala
Practical Aggregate Programming in ScalaPractical Aggregate Programming in Scala
Practical Aggregate Programming in ScalaRoberto Casadei
 
Modern c++ (C++ 11/14)
Modern c++ (C++ 11/14)Modern c++ (C++ 11/14)
Modern c++ (C++ 11/14)Geeks Anonymes
 
Future vs. Monix Task
Future vs. Monix TaskFuture vs. Monix Task
Future vs. Monix TaskHermann Hueck
 
C++ Generators and Property-based Testing
C++ Generators and Property-based TestingC++ Generators and Property-based Testing
C++ Generators and Property-based TestingSumant Tambe
 
Functional programming in Scala
Functional programming in ScalaFunctional programming in Scala
Functional programming in ScalaDamian Jureczko
 

La actualidad más candente (20)

What's New in C++ 11?
What's New in C++ 11?What's New in C++ 11?
What's New in C++ 11?
 
Ankara Jug - Practical Functional Programming with Scala
Ankara Jug - Practical Functional Programming with ScalaAnkara Jug - Practical Functional Programming with Scala
Ankara Jug - Practical Functional Programming with Scala
 
Scala: functional programming for the imperative mind
Scala: functional programming for the imperative mindScala: functional programming for the imperative mind
Scala: functional programming for the imperative mind
 
Systematic Generation Data and Types in C++
Systematic Generation Data and Types in C++Systematic Generation Data and Types in C++
Systematic Generation Data and Types in C++
 
C++ 11 Features
C++ 11 FeaturesC++ 11 Features
C++ 11 Features
 
The Style of C++ 11
The Style of C++ 11The Style of C++ 11
The Style of C++ 11
 
Modern C++
Modern C++Modern C++
Modern C++
 
C++11: Feel the New Language
C++11: Feel the New LanguageC++11: Feel the New Language
C++11: Feel the New Language
 
Introduction to Functional Programming with Scala
Introduction to Functional Programming with ScalaIntroduction to Functional Programming with Scala
Introduction to Functional Programming with Scala
 
Fun with Lambdas: C++14 Style (part 2)
Fun with Lambdas: C++14 Style (part 2)Fun with Lambdas: C++14 Style (part 2)
Fun with Lambdas: C++14 Style (part 2)
 
Introduction to programming in scala
Introduction to programming in scalaIntroduction to programming in scala
Introduction to programming in scala
 
Gentle introduction to modern C++
Gentle introduction to modern C++Gentle introduction to modern C++
Gentle introduction to modern C++
 
Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)
 
Scala Intro
Scala IntroScala Intro
Scala Intro
 
Practical Aggregate Programming in Scala
Practical Aggregate Programming in ScalaPractical Aggregate Programming in Scala
Practical Aggregate Programming in Scala
 
Modern c++ (C++ 11/14)
Modern c++ (C++ 11/14)Modern c++ (C++ 11/14)
Modern c++ (C++ 11/14)
 
Future vs. Monix Task
Future vs. Monix TaskFuture vs. Monix Task
Future vs. Monix Task
 
C++11
C++11C++11
C++11
 
C++ Generators and Property-based Testing
C++ Generators and Property-based TestingC++ Generators and Property-based Testing
C++ Generators and Property-based Testing
 
Functional programming in Scala
Functional programming in ScalaFunctional programming in Scala
Functional programming in Scala
 

Destacado

Mongo db administration guide
Mongo db administration guideMongo db administration guide
Mongo db administration guideDeysi Gmarra
 
StratioDeep: an Integration Layer Between Spark and Cassandra - Spark Summit ...
StratioDeep: an Integration Layer Between Spark and Cassandra - Spark Summit ...StratioDeep: an Integration Layer Between Spark and Cassandra - Spark Summit ...
StratioDeep: an Integration Layer Between Spark and Cassandra - Spark Summit ...Álvaro Agea Herradón
 
Webinar: Compliance and Data Protection in the Big Data Age: MongoDB Security...
Webinar: Compliance and Data Protection in the Big Data Age: MongoDB Security...Webinar: Compliance and Data Protection in the Big Data Age: MongoDB Security...
Webinar: Compliance and Data Protection in the Big Data Age: MongoDB Security...MongoDB
 
RDF4U: RDF Graph Visualization by Interpreting Linked Data as Knowledge
RDF4U: RDF Graph Visualization by Interpreting Linked Data as KnowledgeRDF4U: RDF Graph Visualization by Interpreting Linked Data as Knowledge
RDF4U: RDF Graph Visualization by Interpreting Linked Data as KnowledgeNational Institute of Informatics
 
Ops Jumpstart: MongoDB Administration 101
Ops Jumpstart: MongoDB Administration 101Ops Jumpstart: MongoDB Administration 101
Ops Jumpstart: MongoDB Administration 101MongoDB
 
Saveface - Save your Facebook content as RDF data
Saveface - Save your Facebook content as RDF dataSaveface - Save your Facebook content as RDF data
Saveface - Save your Facebook content as RDF dataFuming Shih
 
Two graph data models : RDF and Property Graphs
Two graph data models : RDF and Property GraphsTwo graph data models : RDF and Property Graphs
Two graph data models : RDF and Property Graphsandyseaborne
 
RDF2Vec: RDF Graph Embeddings for Data Mining
RDF2Vec: RDF Graph Embeddings for Data MiningRDF2Vec: RDF Graph Embeddings for Data Mining
RDF2Vec: RDF Graph Embeddings for Data MiningPetar Ristoski
 
Cassandra at NoSql Matters 2012
Cassandra at NoSql Matters 2012Cassandra at NoSql Matters 2012
Cassandra at NoSql Matters 2012jbellis
 
Cassandra Community Webinar: From Mongo to Cassandra, Architectural Lessons
Cassandra Community Webinar: From Mongo to Cassandra, Architectural LessonsCassandra Community Webinar: From Mongo to Cassandra, Architectural Lessons
Cassandra Community Webinar: From Mongo to Cassandra, Architectural LessonsDataStax
 
Strategies for Distributed Data Storage
Strategies for Distributed Data StorageStrategies for Distributed Data Storage
Strategies for Distributed Data Storagekakugawa
 
Introduction to Cassandra: Replication and Consistency
Introduction to Cassandra: Replication and ConsistencyIntroduction to Cassandra: Replication and Consistency
Introduction to Cassandra: Replication and ConsistencyBenjamin Black
 
Cassandra By Example: Data Modelling with CQL3
Cassandra By Example: Data Modelling with CQL3Cassandra By Example: Data Modelling with CQL3
Cassandra By Example: Data Modelling with CQL3Eric Evans
 
Cloudian at cassandra conference in tokyo
Cloudian at cassandra conference in tokyoCloudian at cassandra conference in tokyo
Cloudian at cassandra conference in tokyoCLOUDIAN KK
 
Titan: The Rise of Big Graph Data
Titan: The Rise of Big Graph DataTitan: The Rise of Big Graph Data
Titan: The Rise of Big Graph DataMarko Rodriguez
 

Destacado (20)

Mongo db administration guide
Mongo db administration guideMongo db administration guide
Mongo db administration guide
 
StratioDeep: an Integration Layer Between Spark and Cassandra - Spark Summit ...
StratioDeep: an Integration Layer Between Spark and Cassandra - Spark Summit ...StratioDeep: an Integration Layer Between Spark and Cassandra - Spark Summit ...
StratioDeep: an Integration Layer Between Spark and Cassandra - Spark Summit ...
 
Access Control for RDF graphs using Abstract Models
Access Control for RDF graphs using Abstract ModelsAccess Control for RDF graphs using Abstract Models
Access Control for RDF graphs using Abstract Models
 
Webinar: Compliance and Data Protection in the Big Data Age: MongoDB Security...
Webinar: Compliance and Data Protection in the Big Data Age: MongoDB Security...Webinar: Compliance and Data Protection in the Big Data Age: MongoDB Security...
Webinar: Compliance and Data Protection in the Big Data Age: MongoDB Security...
 
RDF4U: RDF Graph Visualization by Interpreting Linked Data as Knowledge
RDF4U: RDF Graph Visualization by Interpreting Linked Data as KnowledgeRDF4U: RDF Graph Visualization by Interpreting Linked Data as Knowledge
RDF4U: RDF Graph Visualization by Interpreting Linked Data as Knowledge
 
Ops Jumpstart: MongoDB Administration 101
Ops Jumpstart: MongoDB Administration 101Ops Jumpstart: MongoDB Administration 101
Ops Jumpstart: MongoDB Administration 101
 
Tutorial for RDF Graphs
Tutorial for RDF GraphsTutorial for RDF Graphs
Tutorial for RDF Graphs
 
Saveface - Save your Facebook content as RDF data
Saveface - Save your Facebook content as RDF dataSaveface - Save your Facebook content as RDF data
Saveface - Save your Facebook content as RDF data
 
Graph-based Relational Data Visualization
Graph-based RelationalData VisualizationGraph-based RelationalData Visualization
Graph-based Relational Data Visualization
 
Two graph data models : RDF and Property Graphs
Two graph data models : RDF and Property GraphsTwo graph data models : RDF and Property Graphs
Two graph data models : RDF and Property Graphs
 
RDF2Vec: RDF Graph Embeddings for Data Mining
RDF2Vec: RDF Graph Embeddings for Data MiningRDF2Vec: RDF Graph Embeddings for Data Mining
RDF2Vec: RDF Graph Embeddings for Data Mining
 
Cassandra at NoSql Matters 2012
Cassandra at NoSql Matters 2012Cassandra at NoSql Matters 2012
Cassandra at NoSql Matters 2012
 
Cassandra Community Webinar: From Mongo to Cassandra, Architectural Lessons
Cassandra Community Webinar: From Mongo to Cassandra, Architectural LessonsCassandra Community Webinar: From Mongo to Cassandra, Architectural Lessons
Cassandra Community Webinar: From Mongo to Cassandra, Architectural Lessons
 
Strategies for Distributed Data Storage
Strategies for Distributed Data StorageStrategies for Distributed Data Storage
Strategies for Distributed Data Storage
 
Introduction to Cassandra: Replication and Consistency
Introduction to Cassandra: Replication and ConsistencyIntroduction to Cassandra: Replication and Consistency
Introduction to Cassandra: Replication and Consistency
 
SPARQL Cheat Sheet
SPARQL Cheat SheetSPARQL Cheat Sheet
SPARQL Cheat Sheet
 
Database security
Database securityDatabase security
Database security
 
Cassandra By Example: Data Modelling with CQL3
Cassandra By Example: Data Modelling with CQL3Cassandra By Example: Data Modelling with CQL3
Cassandra By Example: Data Modelling with CQL3
 
Cloudian at cassandra conference in tokyo
Cloudian at cassandra conference in tokyoCloudian at cassandra conference in tokyo
Cloudian at cassandra conference in tokyo
 
Titan: The Rise of Big Graph Data
Titan: The Rise of Big Graph DataTitan: The Rise of Big Graph Data
Titan: The Rise of Big Graph Data
 

Similar a Fosdem 2011 - A Common Graph Database Access Layer for .Net and Mono

1st UIM-GDB - Connections to the Real World
1st UIM-GDB - Connections to the Real World1st UIM-GDB - Connections to the Real World
1st UIM-GDB - Connections to the Real WorldAchim Friedland
 
Scalable up genomic analysis with ADAM
Scalable up genomic analysis with ADAMScalable up genomic analysis with ADAM
Scalable up genomic analysis with ADAMfnothaft
 
Terence Barr - jdk7+8 - 24mai2011
Terence Barr - jdk7+8 - 24mai2011Terence Barr - jdk7+8 - 24mai2011
Terence Barr - jdk7+8 - 24mai2011Agora Group
 
Asynchronous single page applications without a line of HTML or Javascript, o...
Asynchronous single page applications without a line of HTML or Javascript, o...Asynchronous single page applications without a line of HTML or Javascript, o...
Asynchronous single page applications without a line of HTML or Javascript, o...Robert Schadek
 
ScaleGraph - A High-Performance Library for Billion-Scale Graph Analytics
ScaleGraph - A High-Performance Library for Billion-Scale Graph AnalyticsScaleGraph - A High-Performance Library for Billion-Scale Graph Analytics
ScaleGraph - A High-Performance Library for Billion-Scale Graph AnalyticsToyotaro Suzumura
 
High-Performance Graph Analysis and Modeling
High-Performance Graph Analysis and ModelingHigh-Performance Graph Analysis and Modeling
High-Performance Graph Analysis and ModelingNesreen K. Ahmed
 
Web-Scale Graph Analytics with Apache® Spark™
Web-Scale Graph Analytics with Apache® Spark™Web-Scale Graph Analytics with Apache® Spark™
Web-Scale Graph Analytics with Apache® Spark™Databricks
 
Sugar Presentation - YULHackers March 2009
Sugar Presentation - YULHackers March 2009Sugar Presentation - YULHackers March 2009
Sugar Presentation - YULHackers March 2009spierre
 
Java se-7-evolves-toulouse-jug-2001-09-14
Java se-7-evolves-toulouse-jug-2001-09-14Java se-7-evolves-toulouse-jug-2001-09-14
Java se-7-evolves-toulouse-jug-2001-09-14Baptiste Mathus
 
Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”
Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”
Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”Databricks
 
From Zero to Application Delivery with NixOS
From Zero to Application Delivery with NixOSFrom Zero to Application Delivery with NixOS
From Zero to Application Delivery with NixOSSusan Potter
 
Big data shim
Big data shimBig data shim
Big data shimtistrue
 
Odessapy2013 - Graph databases and Python
Odessapy2013 - Graph databases and PythonOdessapy2013 - Graph databases and Python
Odessapy2013 - Graph databases and PythonMax Klymyshyn
 
designpatterns_blair_upe.ppt
designpatterns_blair_upe.pptdesignpatterns_blair_upe.ppt
designpatterns_blair_upe.pptbanti43
 
Neo4j Morpheus: Interweaving Table and Graph Data with SQL and Cypher in Apac...
Neo4j Morpheus: Interweaving Table and Graph Data with SQL and Cypher in Apac...Neo4j Morpheus: Interweaving Table and Graph Data with SQL and Cypher in Apac...
Neo4j Morpheus: Interweaving Table and Graph Data with SQL and Cypher in Apac...Databricks
 

Similar a Fosdem 2011 - A Common Graph Database Access Layer for .Net and Mono (20)

1st UIM-GDB - Connections to the Real World
1st UIM-GDB - Connections to the Real World1st UIM-GDB - Connections to the Real World
1st UIM-GDB - Connections to the Real World
 
Scalable up genomic analysis with ADAM
Scalable up genomic analysis with ADAMScalable up genomic analysis with ADAM
Scalable up genomic analysis with ADAM
 
Terence Barr - jdk7+8 - 24mai2011
Terence Barr - jdk7+8 - 24mai2011Terence Barr - jdk7+8 - 24mai2011
Terence Barr - jdk7+8 - 24mai2011
 
MapReduce Algorithm Design
MapReduce Algorithm DesignMapReduce Algorithm Design
MapReduce Algorithm Design
 
Asynchronous single page applications without a line of HTML or Javascript, o...
Asynchronous single page applications without a line of HTML or Javascript, o...Asynchronous single page applications without a line of HTML or Javascript, o...
Asynchronous single page applications without a line of HTML or Javascript, o...
 
ScaleGraph - A High-Performance Library for Billion-Scale Graph Analytics
ScaleGraph - A High-Performance Library for Billion-Scale Graph AnalyticsScaleGraph - A High-Performance Library for Billion-Scale Graph Analytics
ScaleGraph - A High-Performance Library for Billion-Scale Graph Analytics
 
Scala+data
Scala+dataScala+data
Scala+data
 
High-Performance Graph Analysis and Modeling
High-Performance Graph Analysis and ModelingHigh-Performance Graph Analysis and Modeling
High-Performance Graph Analysis and Modeling
 
Web-Scale Graph Analytics with Apache® Spark™
Web-Scale Graph Analytics with Apache® Spark™Web-Scale Graph Analytics with Apache® Spark™
Web-Scale Graph Analytics with Apache® Spark™
 
Sugar Presentation - YULHackers March 2009
Sugar Presentation - YULHackers March 2009Sugar Presentation - YULHackers March 2009
Sugar Presentation - YULHackers March 2009
 
Java se-7-evolves-toulouse-jug-2001-09-14
Java se-7-evolves-toulouse-jug-2001-09-14Java se-7-evolves-toulouse-jug-2001-09-14
Java se-7-evolves-toulouse-jug-2001-09-14
 
Hadoop ecosystem
Hadoop ecosystemHadoop ecosystem
Hadoop ecosystem
 
Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”
Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”
Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”
 
Hadoop ecosystem
Hadoop ecosystemHadoop ecosystem
Hadoop ecosystem
 
From Zero to Application Delivery with NixOS
From Zero to Application Delivery with NixOSFrom Zero to Application Delivery with NixOS
From Zero to Application Delivery with NixOS
 
Big data shim
Big data shimBig data shim
Big data shim
 
Odessapy2013 - Graph databases and Python
Odessapy2013 - Graph databases and PythonOdessapy2013 - Graph databases and Python
Odessapy2013 - Graph databases and Python
 
designpatterns_blair_upe.ppt
designpatterns_blair_upe.pptdesignpatterns_blair_upe.ppt
designpatterns_blair_upe.ppt
 
Neo4j Morpheus: Interweaving Table and Graph Data with SQL and Cypher in Apac...
Neo4j Morpheus: Interweaving Table and Graph Data with SQL and Cypher in Apac...Neo4j Morpheus: Interweaving Table and Graph Data with SQL and Cypher in Apac...
Neo4j Morpheus: Interweaving Table and Graph Data with SQL and Cypher in Apac...
 
Vidoop CouchDB Talk
Vidoop CouchDB TalkVidoop CouchDB Talk
Vidoop CouchDB Talk
 

Más de Achim Friedland

Open Source Transparency Software for E-Mobility
Open Source Transparency Software for E-MobilityOpen Source Transparency Software for E-Mobility
Open Source Transparency Software for E-MobilityAchim Friedland
 
11. Workshop der Fachgruppe Recht „IKT für Elektromobilität III“ - Chargy Ope...
11. Workshop der Fachgruppe Recht „IKT für Elektromobilität III“ - Chargy Ope...11. Workshop der Fachgruppe Recht „IKT für Elektromobilität III“ - Chargy Ope...
11. Workshop der Fachgruppe Recht „IKT für Elektromobilität III“ - Chargy Ope...Achim Friedland
 
Chargy - E-Mobility Transparency Software
Chargy - E-Mobility Transparency SoftwareChargy - E-Mobility Transparency Software
Chargy - E-Mobility Transparency SoftwareAchim Friedland
 
Öffentliche Daten nutzen! Nur wie bekommen?
Öffentliche Daten nutzen! Nur wie bekommen?Öffentliche Daten nutzen! Nur wie bekommen?
Öffentliche Daten nutzen! Nur wie bekommen?Achim Friedland
 
Re-Using Open Data for Smart e-Mobility
Re-Using Open Data for Smart e-MobilityRe-Using Open Data for Smart e-Mobility
Re-Using Open Data for Smart e-MobilityAchim Friedland
 
Open Charging Cloud @ E-World 2017 in Essen
Open Charging Cloud @ E-World 2017 in EssenOpen Charging Cloud @ E-World 2017 in Essen
Open Charging Cloud @ E-World 2017 in EssenAchim Friedland
 
Security and Privacy in the current e-mobility charging infrastructure
Security and Privacy in the current e-mobility charging infrastructureSecurity and Privacy in the current e-mobility charging infrastructure
Security and Privacy in the current e-mobility charging infrastructureAchim Friedland
 
Can the e-Mobility Charging Infrastructure be a Blueprint for other IoT Proje...
Can the e-Mobility Charging Infrastructure be a Blueprint for other IoT Proje...Can the e-Mobility Charging Infrastructure be a Blueprint for other IoT Proje...
Can the e-Mobility Charging Infrastructure be a Blueprint for other IoT Proje...Achim Friedland
 
Open Charging Cloud - Manage, Share and Incentivize Open Data
Open Charging Cloud - Manage, Share and Incentivize Open DataOpen Charging Cloud - Manage, Share and Incentivize Open Data
Open Charging Cloud - Manage, Share and Incentivize Open DataAchim Friedland
 
Towards a Security-aware Network Virtualization
Towards a Security-aware Network VirtualizationTowards a Security-aware Network Virtualization
Towards a Security-aware Network VirtualizationAchim Friedland
 
A Generalized Label-Forwarding Architecture for the Future Internet
A Generalized Label-Forwarding Architecture for the Future InternetA Generalized Label-Forwarding Architecture for the Future Internet
A Generalized Label-Forwarding Architecture for the Future InternetAchim Friedland
 
Database Pro Power Days 2010 - Graph data in the cloud using .NET
Database Pro Power Days 2010 -  Graph data in the cloud using .NETDatabase Pro Power Days 2010 -  Graph data in the cloud using .NET
Database Pro Power Days 2010 - Graph data in the cloud using .NETAchim Friedland
 
NoSQL Frankfurt 2010 - The GraphDB Landscape and sones
NoSQL Frankfurt 2010  - The GraphDB Landscape and sonesNoSQL Frankfurt 2010  - The GraphDB Landscape and sones
NoSQL Frankfurt 2010 - The GraphDB Landscape and sonesAchim Friedland
 

Más de Achim Friedland (13)

Open Source Transparency Software for E-Mobility
Open Source Transparency Software for E-MobilityOpen Source Transparency Software for E-Mobility
Open Source Transparency Software for E-Mobility
 
11. Workshop der Fachgruppe Recht „IKT für Elektromobilität III“ - Chargy Ope...
11. Workshop der Fachgruppe Recht „IKT für Elektromobilität III“ - Chargy Ope...11. Workshop der Fachgruppe Recht „IKT für Elektromobilität III“ - Chargy Ope...
11. Workshop der Fachgruppe Recht „IKT für Elektromobilität III“ - Chargy Ope...
 
Chargy - E-Mobility Transparency Software
Chargy - E-Mobility Transparency SoftwareChargy - E-Mobility Transparency Software
Chargy - E-Mobility Transparency Software
 
Öffentliche Daten nutzen! Nur wie bekommen?
Öffentliche Daten nutzen! Nur wie bekommen?Öffentliche Daten nutzen! Nur wie bekommen?
Öffentliche Daten nutzen! Nur wie bekommen?
 
Re-Using Open Data for Smart e-Mobility
Re-Using Open Data for Smart e-MobilityRe-Using Open Data for Smart e-Mobility
Re-Using Open Data for Smart e-Mobility
 
Open Charging Cloud @ E-World 2017 in Essen
Open Charging Cloud @ E-World 2017 in EssenOpen Charging Cloud @ E-World 2017 in Essen
Open Charging Cloud @ E-World 2017 in Essen
 
Security and Privacy in the current e-mobility charging infrastructure
Security and Privacy in the current e-mobility charging infrastructureSecurity and Privacy in the current e-mobility charging infrastructure
Security and Privacy in the current e-mobility charging infrastructure
 
Can the e-Mobility Charging Infrastructure be a Blueprint for other IoT Proje...
Can the e-Mobility Charging Infrastructure be a Blueprint for other IoT Proje...Can the e-Mobility Charging Infrastructure be a Blueprint for other IoT Proje...
Can the e-Mobility Charging Infrastructure be a Blueprint for other IoT Proje...
 
Open Charging Cloud - Manage, Share and Incentivize Open Data
Open Charging Cloud - Manage, Share and Incentivize Open DataOpen Charging Cloud - Manage, Share and Incentivize Open Data
Open Charging Cloud - Manage, Share and Incentivize Open Data
 
Towards a Security-aware Network Virtualization
Towards a Security-aware Network VirtualizationTowards a Security-aware Network Virtualization
Towards a Security-aware Network Virtualization
 
A Generalized Label-Forwarding Architecture for the Future Internet
A Generalized Label-Forwarding Architecture for the Future InternetA Generalized Label-Forwarding Architecture for the Future Internet
A Generalized Label-Forwarding Architecture for the Future Internet
 
Database Pro Power Days 2010 - Graph data in the cloud using .NET
Database Pro Power Days 2010 -  Graph data in the cloud using .NETDatabase Pro Power Days 2010 -  Graph data in the cloud using .NET
Database Pro Power Days 2010 - Graph data in the cloud using .NET
 
NoSQL Frankfurt 2010 - The GraphDB Landscape and sones
NoSQL Frankfurt 2010  - The GraphDB Landscape and sonesNoSQL Frankfurt 2010  - The GraphDB Landscape and sones
NoSQL Frankfurt 2010 - The GraphDB Landscape and sones
 

Último

Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 

Último (20)

Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 

Fosdem 2011 - A Common Graph Database Access Layer for .Net and Mono

  • 1. A Common Graph Database Access Layer for .NET and Mono Achim Friedland <achim@graph-database.org>, Aperis GmbH FOSDEM 2011 - Mono devroom
  • 2. Graphs Any structure having vertices and edges... 2
  • 3. ...but different representations possible. Adjacency matrix vs. Incidence matrix vs. Adjacency list vs. Edge list vs. Classes, Index-based vs. Index-free Adjacency, Dense vs. Sparse graphs, On-disc vs. In-memory graphs... 3
  • 4. The problem... • Different graph representations... • have different levels of expressivity • can be very application specific • hard to optimize a single one for every use-case • Multiple APIs from different vendors 4
  • 5. So, where to find a common API? 5
  • 6. Graph Commons • Edges are first-class citizens • Information gathering by traversing Indices are less important than in relational DBs • Index-free adjacency, so the cost of traversing an edge is in-depended from the size of the graph ( ...at least when you ignore the GC ;) 6
  • 7. The Property-Graph Model The most common graph model within the NoSQL GraphDB space edge label Id: 1 Id: 2 Friends name: Alice name: Bob since: 2009/09/21 age: 21 age: 23 edge vertex properties properties • directed: Each edge has a source and destination vertex • attributed: Vertices and edges carry key/value pairs • edge-labeled: The label denotes the type of relationship • multi-graph: Multiple edges between any two vertices allowed 7
  • 8. A Property Graph Model Interface for .NET and Mono // Use a class-based in-memory graph var graph = new InMemoryGraph(); var v1 = graph.AddVertex(new VertexId(1)); var v2 = graph.AddVertex(new VertexId(2)); v1.SetProperty("name", "Alice"); v1.SetProperty("age" , 21); v2.SetProperty("name", "Bob"); v2.SetProperty("age" , 23); var e1 = graph.AddEdge(v1, v2, new EdgeId(1), "Friends"); e1.SetProperty(“since”, ”2009/09/21”); 8
  • 9. Or, if you prefer the Dynamic Language Runtime... // Use a class-based in-memory graph var graph = new InMemoryGraph(); var v1 = graph.AddVertex().AsDynamic(); var v2 = graph.AddVertex().AsDynamic(); v1.name = "Alice"; v1.age = 21; v2.name = "Bob"; v2.age = 23; var e1 = graph.AddEdge(v1, v2, "Friends").AsDynamic(); e1.since = ”2009/09/21”; 9
  • 10. Current status... • About 70% of the current JAVA original • e.g. Transactions, Auto-Indexing still missing • Expect first release within the next 4-6 weeks 10
  • 11. The future... • Different implementations for different graph representations • Implementations for remote graphs (Rexster and Neo4J REST in separate projects) • Extensions, e.g. for semantic graphs 11
  • 12. Ok, but how to query a property- graph? 12
  • 13. A data flow framework for property graph models : IEnumerator<E>, IEnumerable<E> S AbstractPipe<S, E> E Source Elements Emitted Elements 13
  • 14. A simple pipe yielding all objects without modification public class IdentityPipe<S> : AbstractPipe<S, S> { public override Boolean MoveNext() { if (_InternalEnumerator == null) return false; if (_InternalEnumerator.MoveNext()) { _CurrentElement = _InternalEnumerator.Current; return true; } return false; } } 14
  • 15. A simple pipe yielding all strings turned to uppercase public class ToUpperPipe<String> : AbstractPipe<String, String> { public override Boolean MoveNext() { if (_InternalEnumerator == null) return false; if (_InternalEnumerator.MoveNext()) { _CurrentElement = _InternalEnumerator.Current.ToUpper(); return true; } return false; } } 15
  • 16. A simple pipe yielding the vertex property “name” public class GetNameProperty : AbstractPipe<IVertex, String> { public override Boolean MoveNext() { if (_InternalEnumerator == null) return false; if (_InternalEnumerator.MoveNext()) { _CurrentElement = _IVertex.GetProperty(“name”); return true; } return false; } } 16
  • 17. Allow the creation of state or side effects within a pipe S ISideEffectPipe<in S, out E, out T> E Source Emitted Elements T Elements Side Effect 17
  • 18. Count the total number of elements passed through the pipe public class CountPipe<S> : AbstractPipe<S,S>, ISideEffectPipe<S,S,Int64 { [...] public override Boolean MoveNext() { if (_InternalEnumerator == null) return false; if (_InternalEnumerator.MoveNext()) { _CurrentElement = _InternalEnumerator.Current; Interlocked.Increment(ref _Counter); return true; } return false; } public Int64 SideEffect { get { return _Counter; }} } 18
  • 19. Create complex pipes by combining pipes to pipelines S Pipeline<S, E> E pipe1<S,A> pipe2<B,C> pipe3<C,E> Source Emitted Elements Elements 19
  • 20. A data flow framework for property graph models // Friends-of-a-friend var pipe1 = new VertexEdgePipe(VertexEdgePipe.Step.OUT_EDGES); var pipe2 = new LabelFilterPipe("Friends", ComparisonFilter.EQUALS); var pipe3 = new EdgeVertexPipe(EdgeVertexPipe.Step.IN_VERTEX); var pipe4 = new VertexEdgePipe(VertexEdgePipe.Step.OUT_EDGES); var pipe5 = new LabelFilterPipe("Friends", ComparisonFilter.EQUALS); var pipe6 = new EdgeVertexPipe(EdgeVertexPipe.Step.IN_VERTEX); var pipe7 = new PropertyPipe("name"); var pipeline = new Pipeline(pipe1,pipe2,pipe3,pipe4,pipe5,pipe6,pipe7); pipeline.SetSource(new SingleEnumerator( graph.GetVertex(new VertexId(1)))); foreach (var _foaf in pipeline.Take(5)) {   Console.WriteLine(_foaf); } 20
  • 21. A data flow framework for property graph models • Think of “LINQ for graphs” • ...but without the syntactic sugar. • Very Powerful, but also very “noisy” :( 21
  • 22. Current status & the future • About 95% of the current JAVA original • Expect first release with the next weeks 22
  • 23. And what about ad hoc querying for exploring a property-graph? 23
  • 24. Ad hoc Query Language for graphs • Ad Hoc querying a property graph • User-friendly wrapper around pipes • “perl for graphs” ;) 24
  • 25. Ad hoc Query Language for graphs // Friends-of-a-friend var pipe1 = new VertexEdgePipe(VertexEdgePipe.Step.OUT_EDGES); var pipe2 = new LabelFilterPipe("Friends", ComparisonFilter.EQUALS); var pipe3 = new EdgeVertexPipe(EdgeVertexPipe.Step.IN_VERTEX); var pipe4 = new VertexEdgePipe(VertexEdgePipe.Step.OUT_EDGES); var pipe5 = new LabelFilterPipe("Friends", ComparisonFilter.EQUALS); var pipe6 = new EdgeVertexPipe(EdgeVertexPipe.Step.IN_VERTEX); var pipe7 = new PropertyPipe("name"); var pipeline = new Pipeline(pipe1,pipe2,pipe3,pipe4,pipe5,pipe6,pipe7); pipeline.SetSource(new SingleEnumerator( graph.GetVertex(new VertexId(1)))); g:id-v(1)/outE[@label='Friends']/inV/outE [@label='Friends']/inV/@name 25
  • 26. Current status & the future • Reimplementation not yet started :( • Will probably be based on the DLR • Expect first release with the next 2-3 months 26
  • 27. But... • Do not expect Gremlin as the one-and-only query language for each use-case! • More application specific Query Languages could be implemented using pipes e.g. sones GQL, OrientDB SQL 27
  • 28. How to access a remote graph? How to expose a graph via the network? 28
  • 29. A HTTP/REST interface for Blueprints Property Graph Models • Exposes your application-embedded Blueprints graph via HTTP/REST • Vertices and edges are REST resources • The rexster client library allows you to access most JAVA-based GraphDBs Neo4J, OrientDB available; DEX, InfiniteGraph coming soon... 29
  • 33. Default resource representation: JSON curl -H Accept:application/json http://localhost:8182/graph1/vertices/1 { "version" : "0.1", "results" : { "_type" : "vertex", "_id" : "1", "name" : "Alice", "age" : 21 }, "query_time" : 0.014235 } 33
  • 34. Current status • About 60% of the current JAVA original • Expect first release with the next 3-4 weeks • Rexster Shell might take some more time... 34
  • 35. Future Resource Representations • Link-aware, self-describing hypermedia (see Neo4J) • e.g. ATOM, XML + XLINK, RDFa • Application specific protocols • GEXF for exporting a graph to GEPHI • GraphML/GDF/... graph formats • MediaRSS your photo graph traversal via Cooliris 35
  • 36. The GraphDB Graph... OrientDB for Documents ThinkerGraph & Gremlin for Ad Hoc InfiniteGraph for Neo4J for GIS Clustering InfoGrid for WebApps In-Memory for Caching OrientDB for Ad Hoc Neo4J for HA 36
  • 37. Still hungry for more? FOSDEM 2011 GraphDB dinner! Meet us in front of Le Roy d’Espagne Grand Place 1, Brussels 20:00 PM 37