SlideShare a Scribd company logo
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

More Related Content

What's hot

What's New in C++ 11?
What's New in C++ 11?What's New in C++ 11?
What's New in C++ 11?
Sasha Goldshtein
 
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
Ensar 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 mind
Sander 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 Features
Jan Rüegg
 
The Style of C++ 11
The Style of C++ 11The Style of C++ 11
The Style of C++ 11
Sasha Goldshtein
 
Modern C++
Modern C++Modern C++
Modern C++
Michael Clark
 
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 scala
Amuhinda 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
 
Scala Intro
Scala IntroScala Intro
Practical Aggregate Programming in Scala
Practical Aggregate Programming in ScalaPractical Aggregate Programming in Scala
Practical Aggregate Programming in Scala
Roberto 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 Task
Hermann Hueck
 
C++11
C++11C++11
C++ Generators and Property-based Testing
C++ Generators and Property-based TestingC++ Generators and Property-based Testing
C++ Generators and Property-based Testing
Sumant Tambe
 
Functional programming in Scala
Functional programming in ScalaFunctional programming in Scala
Functional programming in Scala
Damian Jureczko
 

What's hot (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
 

Viewers also liked

Mongo db administration guide
Mongo db administration guideMongo db administration guide
Mongo db administration guide
Deysi 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
 
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
PlanetData Network of Excellence
 
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 Knowledge
National Institute of Informatics
 
Ops Jumpstart: MongoDB Administration 101
Ops Jumpstart: MongoDB Administration 101Ops Jumpstart: MongoDB Administration 101
Ops Jumpstart: MongoDB Administration 101
MongoDB
 
Tutorial for RDF Graphs
Tutorial for RDF GraphsTutorial for RDF Graphs
Tutorial for RDF Graphs
Kishoj Bajracharya
 
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
Fuming Shih
 
Graph-based Relational Data Visualization
Graph-based RelationalData VisualizationGraph-based RelationalData Visualization
Graph-based Relational Data Visualization
Universidade de São Paulo
 
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
andyseaborne
 
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
Petar 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 Lessons
DataStax
 
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 Consistency
Benjamin Black
 
SPARQL Cheat Sheet
SPARQL Cheat SheetSPARQL Cheat Sheet
SPARQL Cheat Sheet
LeeFeigenbaum
 
Database security
Database securityDatabase security
Database security
Software Engineering
 
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
Eric Evans
 
Cloudian at cassandra conference in tokyo
Cloudian at cassandra conference in tokyoCloudian at cassandra conference in tokyo
Cloudian at cassandra conference in tokyo
CLOUDIAN 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 Data
Marko Rodriguez
 

Viewers also liked (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 to 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 ADAM
fnothaft
 
Terence Barr - jdk7+8 - 24mai2011
Terence Barr - jdk7+8 - 24mai2011Terence Barr - jdk7+8 - 24mai2011
Terence Barr - jdk7+8 - 24mai2011Agora Group
 
MapReduce Algorithm Design
MapReduce Algorithm DesignMapReduce Algorithm Design
MapReduce Algorithm Design
Gabriela Agustini
 
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 Analytics
Toyotaro Suzumura
 
High-Performance Graph Analysis and Modeling
High-Performance Graph Analysis and ModelingHigh-Performance Graph Analysis and Modeling
High-Performance Graph Analysis and Modeling
Nesreen 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 2009
spierre
 
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
Baptiste Mathus
 
Hadoop ecosystem
Hadoop ecosystemHadoop ecosystem
Hadoop ecosystem
Ran Silberman
 
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
 
Hadoop ecosystem
Hadoop ecosystemHadoop ecosystem
Hadoop ecosystem
Ran Silberman
 
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
Susan Potter
 
Big data shim
Big data shimBig data shim
Big data shim
tistrue
 
Odessapy2013 - Graph databases and Python
Odessapy2013 - Graph databases and PythonOdessapy2013 - Graph databases and Python
Odessapy2013 - Graph databases and Python
Max Klymyshyn
 
designpatterns_blair_upe.ppt
designpatterns_blair_upe.pptdesignpatterns_blair_upe.ppt
designpatterns_blair_upe.ppt
banti43
 
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
 
Vidoop CouchDB Talk
Vidoop CouchDB TalkVidoop CouchDB Talk
Vidoop CouchDB Talk
Chris Anderson
 

Similar to 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
 

More from 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-Mobility
Achim 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 Software
Achim 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-Mobility
Achim 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 Essen
Achim 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 infrastructure
Achim 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 Data
Achim 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 sones
Achim Friedland
 

More from 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
 

Recently uploaded

GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
Peter Spielvogel
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
Pierluigi Pugliese
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
James Anderson
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
Neo4j
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
nkrafacyberclub
 

Recently uploaded (20)

GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.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