GDM 2011 - Neo4j and real world apps.

Post on 16-May-2015

8,596 views 1 download

Tags:

description

There is a lot of research happening in graph databases these days. This is a

transcript

Peter NeubauerNeo Technology

#neo4j@peterneubauerpeter@neotechnology.com

Neo4j – what is it?

Java based, embeddable, data-localGPL/AGPLACID, JTA compliantIndexing framework24/7 since 2003High Availability clustering supportGreat communityTinkerpop pipes processing stack

Building a node space (core API)GraphDatabaseService graphDb = ... // Get factory

// Create Thomas 'Neo' AndersonNode mrAnderson = graphDb.createNode();mrAnderson.setProperty( "name", "Thomas Anderson" );mrAnderson.setProperty( "age", 29 );

// Create MorpheusNode morpheus = graphDb.createNode();morpheus.setProperty( "name", "Morpheus" );morpheus.setProperty( "rank", "Captain" );morpheus.setProperty( "occupation", "Total bad ass" );

// Create a relationship representing that they know each othermrAnderson.createRelationshipTo( morpheus, RelTypes.KNOWS );// ...create Trinity, Cypher, Agent Smith, Architect similarly

Building a node spaceGraphDatabaseService graphDb = ... // Get factoryTransaction tx = graphdb.beginTx();

// Create Thomas 'Neo' AndersonNode mrAnderson = graphDb.createNode();mrAnderson.setProperty( "name", "Thomas Anderson" );mrAnderson.setProperty( "age", 29 );

// Create MorpheusNode morpheus = graphDb.createNode();morpheus.setProperty( "name", "Morpheus" );morpheus.setProperty( "rank", "Captain" );morpheus.setProperty( "occupation", "Total bad ass" );

// Create a relationship representing that they know each othermrAnderson.createRelationshipTo( morpheus, RelTypes.KNOWS );// ...create Trinity, Cypher, Agent Smith, Architect similarlytx.commit();

Code (2): Traversing a node space

// Instantiate a traverser that returns Mr Anderson's friendsTraverser friendsTraverser = mrAnderson.traverse(

Traverser.Order.BREADTH_FIRST,StopEvaluator.END_OF_GRAPH,ReturnableEvaluator.ALL_BUT_START_NODE,RelTypes.KNOWS,Direction.OUTGOING );

// Traverse the node space and print out the resultSystem.out.println( "Mr Anderson's friends:" );for ( Node friend : friendsTraverser ){

System.out.printf( "At depth %d => %s%n",friendsTraverser.currentPosition().getDepth(),friend.getProperty( "name" ) );

}

Rubygem install neo4j

require ”rubygems”require 'neo4j'

class Person include Neo4j::NodeMixin property :name, :age, :occupation index :name has_n :friendsend

Neo4j::Transactoin.run do neo = Person.new :name=>'Neo', :age=>29 morpheus = Person.new :name=>'Morpheus', :occupation=>'badass' neo.friends << morpheusend

neo.friends.each {|p|...}

Neo4j 1.3 news

GPL Community Edition128 Billion primitives address spaceMore graph algosShort string → longWeb visualizationGremlin 0.9 built-inHA improvements

Web admin

Neo4j High Availability

Neo4j – what do I do with it?

Network ManagementMaster Data ManagementSocialFinanceSpatialOther

BioinformaticsRDFRouting

Call Data Records (CDR)Forming a graphLocation basedPossible uses:

Find clusters (better plans)Build social connectionsFind influencers

Financial data – fraud detection

name = “Mr Godfather”karma = veeeery-lowcash = more-than-you

11

amount = $1000

name = “Emil”cash = always-too-li'l

title = “ATM @ Wall St”id = 230918484233cash_left = 384204

33

1313

TRANSFER WITHDRAW

name = “The Tavern”lat = 1295238237long = 234823492

amount = $1000

name = ...

77

22

OWNS

DEPOSITTR

ANSF

ER

name = ...

4242

WITHDRAW

Routing

Social graphs

RecommendationsLocation based servicesInfluencersShortest path

Recommendations and big graphsGlobal heuristics

Page rankLocal recommendations

Shortest pathsHammock functionsRandom walksDijkstra, A*, Shooting star etc

Impact Analytics, CMDB, Network Management, Provisioning

Impact Analytics, CMDB, Network Management, Provisioning

Master Data Management

Multiple indexes - GIS

Neo4j dynamic layers

Layer1

Layer2

Layer3

GeometryEncoder

DynamicQuery

DynamicStyles

DynamicMeta-Inf

Connected domain data Neo4j Spatial GIS and Spatial stacks

OpenStreetMap

Network Topology analysis

Analytics of network coverage and frequenciesCell towersDrive dataInfrastructure

AnalyticsSpatial signal strengthAntenna placement and azimuthFrequency planningNetwork differences over timeReporting and charting

Cell network analysis

Cell network analysis

Simulations (Energy market)

agents, markets, power plants, bids, substances, technologies

Relevant research areasDistributed traversals

Parallel (BSP) and Local (Neo4j)Crossing shardsMultithreaded

Graph shardingUpfront sharding utilsRuntime sharding algosPartial sharding/replication

Parallel garbage collection under high loadBig graph algos and heuristics

Questions?

Image credit: lost again! Sorry :(

http://neotechnology.com