Real World Applications with Spring Data Neo4j

1,732
-1

Published on

Speaker: Michael Hunger
Spring Data Neo4j in its 2.x version is a mature implementation of an object graph mapping framework, that both closely integrates with the Spring Framework and also offers unique modeling and querying opportunities by having chosen the property graph data model. This talk presents how several Neo Technology customers already put Spring Data Neo4j into production. They stem from a variety of domains – gaming, server center monitoring, education, appliance management, energy market simulation and more. Based on those use-cases we discuss how to implement real-world applications with Spring Data Neo4j and the Spring Framework. First we want to discuss the business problems they had to solve and why a graph database was a good fit for them. After a quick intro to Spring Data Neo4j and Neo4j, we will talk about modeling choices and the benefits and implications of choosing a rich data model. We'll follow the example domains into code, from annotated domain entities, to the usage of the powerful repository abstractions. Showing how to use Neo4jTemplate to implement some lower level functionality will round off the core library usage. Building on this, we look into the integration aspects, how Spring Data Neo4j can be combined with other Spring projects, like Spring Data MongoDB, Spring Data REST, and Spring Batch. A quick demonstration shows on how to access Spring Data Neo4j from the (Web)-UI layer. The talk will close of with a glimpse into the future: Neo4j added some very interesting features in its 2.0 release. From node labels, automatic indexes and constraints to a transactional http endpoint for Cypher. These changes make it possible to rethink some aspects of Spring Data Neo4j, like type representation and indexing. But also some bigger ideas for changes ahead like basing the object graph mapping completely on Neo4j's Cypher Graph Query Language will be touched.

Published in: Technology

Real World Applications with Spring Data Neo4j

  1. 1. Graph Databases Rock - Learn Why! By Michael Hunger Neo Technology © 2013 SpringOne 2GX. All rights reserved. Do not distribute without permission. Mittwoch, 11. September 13
  2. 2. The book on your seat! -“Graph Databases” Written by experts - Emil Eifrem, Ian Robinson, Jim Webber Compliments of Neo Technology • The definitive guide on graph databases • discusses graph concepts, history and data model • compares with other NoSQL technologies • details use-cases from different domains • explains Neo4j‘s humane query language „Cypher“ Mittwoch, 11. September 13
  3. 3. Bookmark: GraphConnect Oct 3-4 2013 San Francisco $99 4 Mittwoch, 11. September 13 tick et c oup on in you rb ook
  4. 4. Meetup - Tomorrow (Wed) Evening Spring Data Neo4j: Past, Current & Future • Wed, Sep 11, 6-9PM • David's Restaurant, 5151 Stars and Stripes Drive • Just around the corner • Enjoy dessert, wine, beer • Chance to win a signed Spring Data Book http://www.meetup.com/graphdb-sf/events/138428012/ 4 Mittwoch, 11. September 13
  5. 5. (SDN)<-[:LEARN]-(YOU)-[:GET]->(Book) GraphConnect ticket Book Spring Data Neo4j Neo4j? Spring? YOU NoSQL? Sleep? Coffee? Mittwoch, 11. September 13 Awake?
  6. 6. (Michael)-[:CODES]->(SDN)-[:USES]->(Neo4j) console Cypher community graph Kernel Community ME Server Customers Spring Mittwoch, 11. September 13 Cloud
  7. 7. Agenda 1. Connected Data, Graph Databases and Neo4j 2. Spring Data Neo4j 3. Twitter-Graph - Small Example App 4. Real World Customers and Use-Cases 5. Summary 6. Q & A Mittwoch, 11. September 13
  8. 8. NOSQL Mittwoch, 11. September 13
  9. 9. Data Complexity , semi-structure, complexity = f(size Mittwoch, 11. September 13 connectedness)
  10. 10. NOSQL databases Couch KeyValue Riak Redis Document NOSQL Mongo Column oriented Graph Relational Cassandra MySQL Mittwoch, 11. September 13 Postgres Neo4j
  11. 11. Volume vs. Complexity & NOSQL databases Mittwoch, 11. September 13
  12. 12. Volume vs. Complexity & NOSQL databases Volume ~= Size Mittwoch, 11. September 13
  13. 13. Density ~= Complexity Volume vs. Complexity & NOSQL databases Volume ~= Size Mittwoch, 11. September 13
  14. 14. Density ~= Complexity Volume vs. Complexity & NOSQL databases Key-Value Store Volume ~= Size Mittwoch, 11. September 13
  15. 15. Density ~= Complexity Volume vs. Complexity & NOSQL databases Column Family Key-Value Store Volume ~= Size Mittwoch, 11. September 13
  16. 16. Density ~= Complexity Volume vs. Complexity & NOSQL databases Document Databases Column Family Key-Value Store Volume ~= Size Mittwoch, 11. September 13
  17. 17. Density ~= Complexity Volume vs. Complexity & NOSQL databases RDBMS Document Databases Column Family Key-Value Store Volume ~= Size Mittwoch, 11. September 13
  18. 18. Volume vs. Complexity & NOSQL databases Density ~= Complexity Graph Databases RDBMS Document Databases Column Family Key-Value Store Volume ~= Size Mittwoch, 11. September 13
  19. 19. Volume vs. Complexity & NOSQL databases Density ~= Complexity Graph Databases 90% of use cases Mittwoch, 11. September 13 RDBMS Document Databases Column Family Key-Value Store Volume ~= Size
  20. 20. Volume vs. Complexity & NOSQL databases Graph Databases Density ~= Complexity RDBMS Document Databases Column Family Key-Value Store 90% of use cases Mittwoch, 11. September 13 Volume ~= Size
  21. 21. Are Graphs Everywhere ? Mittwoch, 11. September 13
  22. 22. The big graphs are visible 4 Mittwoch, 11. September 13
  23. 23. The big graphs are visible Facebook Open Graph 4 Mittwoch, 11. September 13
  24. 24. The big graphs are visible Facebook Open Graph 4 Mittwoch, 11. September 13
  25. 25. Social Network Mittwoch, 11. September 13
  26. 26. (Network) Impact Analysis Mittwoch, 11. September 13
  27. 27. Route Finding Mittwoch, 11. September 13
  28. 28. Recommendations Mittwoch, 11. September 13
  29. 29. Logistics Mittwoch, 11. September 13
  30. 30. Access Control Mittwoch, 11. September 13
  31. 31. Fraud Analysis Mittwoch, 11. September 13
  32. 32. Graphs are everywhere !! Devices Users Software Stories Computers Internet Creativity Visuals Art Networks Services Business Work Science ERP Friends Neighbor Family Retail Geo Cloud Travel Biology Chemistry Proteins Society Politics Reactions History 21 Mittwoch, 11. September 13 Environments Genes 7
  33. 33. Graph Databases Mittwoch, 11. September 13
  34. 34. 23 Mittwoch, 11. September 13
  35. 35. You know relational 23 Mittwoch, 11. September 13
  36. 36. You know relational 23 Mittwoch, 11. September 13
  37. 37. You know relational customer 23 Mittwoch, 11. September 13
  38. 38. You know relational customer 23 Mittwoch, 11. September 13 account
  39. 39. You know relational customer 23 Mittwoch, 11. September 13 cust_acct account
  40. 40. You know relational customer 23 Mittwoch, 11. September 13 cust_acct account
  41. 41. You know relational customer 23 Mittwoch, 11. September 13 cust_acct account
  42. 42. You know relational customer 23 Mittwoch, 11. September 13 cust_acct account
  43. 43. You know relational now consider relationships... 23 Mittwoch, 11. September 13
  44. 44. You know relational now consider relationships... 23 Mittwoch, 11. September 13
  45. 45. You know relational now consider relationships... 23 Mittwoch, 11. September 13
  46. 46. You know relational now consider relationships... 23 Mittwoch, 11. September 13
  47. 47. You know relational now consider relationships... 23 Mittwoch, 11. September 13
  48. 48. You know relational now consider relationships... 23 Mittwoch, 11. September 13
  49. 49. 23 Mittwoch, 11. September 13
  50. 50. We're talking about a Property Graph 24 Mittwoch, 11. September 13
  51. 51. We're talking about a Property Graph Nodes 24 Mittwoch, 11. September 13
  52. 52. We're talking about a Property Graph Nodes Relationships 24 Mittwoch, 11. September 13
  53. 53. We're talking about a Property Graph Joh a Em il knows Nodes Alli Tob i as Pet e knows rés knows Miic Mc a a knows r knows knows knows knows De lia Properties (each a key+value) + Indexes (for easy look-ups) Mittwoch, 11. September 13 Lar s knows And rea s knows 24 knows And son knows Relationships n knows Mi c hae l Ian
  54. 54. How do I query this graph? START user=node:User(name = ‘Andreas’) MATCH (user)<-[:OWNS]-(account)-[:CONTAINS]-> // lookup starting point in an index start n=node:People(name = ‘Andreas’) (booking)-[:TO]->(recipient) RETURN recipient, count(*) ORDER BY count DESC LIMIT 10 And Mittwoch, 11. September 13 rea s
  55. 55. How do I query this graph? SELECT skills.*, user_skill.* FROM users JOIN user_skill ON users.id = user_skill.user_id JOIN skills ON user_skill.skill_id = skill.id WHERE users.id = 1 Mittwoch, 11. September 13 START user = node:() MATCH (user)-[user_skill]->(skill) RETURN skill, user_skill 26
  56. 56. Whiteboard friendly 4 Mittwoch, 11. September 13
  57. 57. Whiteboard friendly Peter Andreas Allison Emil 4 Mittwoch, 11. September 13
  58. 58. Whiteboard friendly Andreas Peter knows knows knows Allison Emil 4 Mittwoch, 11. September 13 knows
  59. 59. Whiteboard friendly Andreas Peter knows knows knows Allison Emil 4 Mittwoch, 11. September 13 knows
  60. 60. 4 Mittwoch, 11. September 13
  61. 61. (Neo4j) -[:IS_A]->(Graph Database) 4 Mittwoch, 11. September 13
  62. 62. (Neo4j) -[:IS_A]->(Graph Database) - 4 Mittwoch, 11. September 13 A Graph Database:
  63. 63. (Neo4j) -[:IS_A]->(Graph Database) - A Graph Database: - 4 Mittwoch, 11. September 13 a schema-free Property Graph
  64. 64. (Neo4j) -[:IS_A]->(Graph Database) - A Graph Database: - 4 Mittwoch, 11. September 13 a schema-free Property Graph perfect for complex, highly connected data
  65. 65. (Neo4j) -[:IS_A]->(Graph Database) - A Graph Database: - 4 Mittwoch, 11. September 13 a schema-free Property Graph perfect for complex, highly connected data A Graph Database:
  66. 66. (Neo4j) -[:IS_A]->(Graph Database) - A Graph Database: - Mittwoch, 11. September 13 perfect for complex, highly connected data A Graph Database: - 4 a schema-free Property Graph reliable with real ACID Transactions
  67. 67. (Neo4j) -[:IS_A]->(Graph Database) - A Graph Database: - Mittwoch, 11. September 13 perfect for complex, highly connected data A Graph Database: - 4 a schema-free Property Graph reliable with real ACID Transactions scalable: billions of nodes and relationships
  68. 68. (Neo4j) -[:IS_A]->(Graph Database) - A Graph Database: - Mittwoch, 11. September 13 perfect for complex, highly connected data A Graph Database: - 4 a schema-free Property Graph reliable with real ACID Transactions scalable: billions of nodes and relationships fast with millons traversals / second
  69. 69. (Neo4j) -[:IS_A]->(Graph Database) - A Graph Database: - Mittwoch, 11. September 13 perfect for complex, highly connected data A Graph Database: - 4 a schema-free Property Graph reliable with real ACID Transactions scalable: billions of nodes and relationships fast with millons traversals / second Server with REST API, or Embeddable on the JVM
  70. 70. (Neo4j) -[:IS_A]->(Graph Database) - A Graph Database: - Mittwoch, 11. September 13 perfect for complex, highly connected data A Graph Database: 4 a schema-free Property Graph reliable with real ACID Transactions scalable: billions of nodes and relationships fast with millons traversals / second Server with REST API, or Embeddable on the JVM higher-performance with High-Availability (read scaling)
  71. 71. (Neo4j) -[:IS_A]->(Graph Database) Master/ Slave embedded 4 Mittwoch, 11. September 13 _TO LES S_ AS LI CE SC A .net RUN S_A S billions >1 Nodes M trav/s NS ED N _O Clojure JS S TE RA EG T IN PROVIDES NS RU Ruby HIG H_A VA IL. R U N Server Lucene Index Heroku _L IK E ACID TX MySQL Mongo
  72. 72. (Cypher) -[:IS_A]->(Graph Query Language) • Declarative query language • Describe what you want, not how Based on graph pattern matching Example: START user=node:User(name=”Michael”), # index lookup MATCH (user)-[:SKILL]->()<-[rating:SKILL]-(colleague) WHERE rating.ability > 3 RETURN colleague.name, count(*) ORDER BY count(*) DESC LIMIT 10 4 Mittwoch, 11. September 13
  73. 73. Spring Data Neo4j Mittwoch, 11. September 13
  74. 74. Spring Data Neo4j • Spring Data: SpringSource initiative to give Spring developers easy, consistent access to the world of NOSQL databases • projects support different data-stores • convenient, common access patterns • but don‘t hide the power of the database • Spring Data Neo4j is the integration library for Neo4j Mittwoch, 11. September 13
  75. 75. O‘Reilly Spring Data Book „Modern Data Access for Enterprise Java“ • book by the Spring Data project leads • introduction to Spring Data & SD-repositories • covers all sub-projects • consistent sample project across the sub-projects • e-commerce domain • I give one out at the Meetup tomorrow evening! Mittwoch, 11. September 13
  76. 76. Spring Data Neo4j features • Annotation-based programming model • Spring Data Repository support • Neo4j Cypher Query and Traversal support –on dynamic fields and via repository methods • Neo4j indexing support (includes fulltext and numeric range queries) • Always possible to drop down to Neo4j APIs 35 Mittwoch, 11. September 13
  77. 77. Spring Data Neo4j features • Entity types stored in the graph database • Dynamic type projection (duck typing) • Cross-store support for partial JPA / graph entities • Support for JSR-303 (bean validation) • Support for the Neo4j Server (remote server and server extension) • Neo4jTemplate with exception translation, optional transaction management and more 36 Mittwoch, 11. September 13
  78. 78. Classic Neo4j domain class public class User { private final Node underlyingNode; User( final Node node ) { underlyingNode = node; } public Node getUnderlyingNode() { return underlyingNode; } public final String getName() { return (String) underlyingNode.getProperty( “name” ); } public void setName( final String name ) { underlyingNode.setProperty( “name”, name ); } } Mittwoch, 11. September 13
  79. 79. Spring Data Neo4j domain class @NodeEntity public class User { @GraphId private Long id; private String name; } Mittwoch, 11. September 13
  80. 80. Spring Data Neo4j domain class @NodeEntity public class User { @GraphId private Long id; @Indexed(unique = true) private String name; } Mittwoch, 11. September 13
  81. 81. Defining entity classes Mittwoch, 11. September 13
  82. 82. Defining entity classes • @NodeEntity • Represents a node in the graph • Fields saved as properties on node • References stored as relationships between nodes • Instantiated using Java ‘new’ keyword, like any POJO • Also returned by lookup mechanisms • Type information stored in the graph Mittwoch, 11. September 13
  83. 83. Defining entity classes Mittwoch, 11. September 13
  84. 84. Defining entity classes • @RelationshipEntity • Represents a relationship in the graph • Fields saved as properties on relationship • Special fields for start- and end-nodes • Only returned by lookup methods Mittwoch, 11. September 13
  85. 85. Tweet domain class @NodeEntity public class Tweet { @GraphId private Long id; @Indexed(unique=true) Long tweetId; String text; @Fetch User sender; // eager loading @RelatedTo(type="TAGGED") Collection<Tag> tags; @RelatedTo(type="MENTIONS") Set<User> mentions; @RelatedTo(type="SOURCE") Tweet source; } Mittwoch, 11. September 13
  86. 86. Interface based Repositories • based on Repository infrastructure in Spring Data Commons • just define the interface and the namespace configuration • provide out-of-the-box support for –CRUD-Operations –Index-Lookups –Traversal-Execution –Annotated Graph-Queries (Cypher) –Derived Queries –Spatial Queries • extensible via custom methods with provided implementations 42 Mittwoch, 11. September 13
  87. 87. Repositories interface TweetRepository extends GraphRepository<Tweet> { Tweet findByTweetId(String id); Collection<Tweet> findByTagsName(String name); @Query("start user=node({0}) match user<-[:SENDER]-tweet-[:TAGGED]->tag return distinct tag.name") Page<String> findUserTags(User user); } <neo4j:repositories base-package="com.example.repositories"/> @Controller public class TwitterController { @Autowired TweetRepository tweetRepository; @RequestMapping(value = "/tweet/{id}",...) public String show(Model model, @PathVariable String id) { Tweet tweet = tweetRepository.findByTweetId(id); model.addAttribute("tweet", tweet); return "/tweet/show"; }} 43 Mittwoch, 11. September 13
  88. 88. Neo4j-Template (I) • well known Spring Template Pattern • Resource / Transaction Management • Convenience Methods • Nodes and Entities handling & conversion • Fluent Query Result Handling • Works also via REST with Neo4j-Server • Exception Translation 44 Mittwoch, 11. September 13
  89. 89. Small Example App -uses Spring Social (minimally) -Simple Domain: Tweets, Users, Tags -connected Entities -Repositories, Service -standalone App with -embedded Neo4j-Database -Neo4j-Server https://github.com/jexp/sdn-twitter Mittwoch, 11. September 13
  90. 90. Whiteboard friendly - Abstract :User ED ST PO :Tag TAGGED :Tweet TAGG ED :Tag ED :User Mittwoch, 11. September 13 POSTED :Tweet G TA G
  91. 91. Whiteboard friendly - Abstract :User ED ST PO :Tag TAGGED :Tweet TAGG ED :Tag :User Mittwoch, 11. September 13 S ON I NT ME POSTED ED :Tweet G TA G
  92. 92. Whiteboard friendly - Example Attending the #S2GX #SDN session by @mesirii Looking forward to my #SDN session Mittwoch, 11. September 13
  93. 93. Whiteboard friendly - Example @peterneubauer ED ST PO Attending the #S2GX #SDN session by @mesirii @mesirii Mittwoch, 11. September 13 POSTED Looking forward to my #SDN session
  94. 94. Whiteboard friendly - Example @peterneubauer ED ST PO Attending the #S2GX #SDN session by @mesirii @mesirii Mittwoch, 11. September 13 S ON I NT ME POSTED Looking forward to my #SDN session
  95. 95. Whiteboard friendly - Example @peterneubauer ED ST PO Attending the #S2GX #SDN session by @mesirii @mesirii Mittwoch, 11. September 13 S ON I NT ME POSTED TAGGED #S2GX TAGG ED Looking forward to my #SDN session #SDN ED G TA G
  96. 96. Twitter - Graph Data Model 4 Mittwoch, 11. September 13
  97. 97. Spring Data Neo4j - Sample Domain Class & Service 4 Mittwoch, 11. September 13
  98. 98. Neo4j - Sample Graph Query START tag1=node:Tag("tag:*obama*") > MATCH tag1<-[:TAG]-tweet-[:sender]->user, user<-[:sender]-tweet2-[:TAG]->tag2 > WHERE tag2.tag =~ "(?i).*romney.*" > RETURN count(*) as cnt, tag1.tag,tag2.tag +--------------------------------------+ > ORDER BY count(*) DESC | cnt | tag1.tag | tag2.tag | +--------------------------------------+ > LIMIT 10; | 440 | "obama" | "voteromney" | | 148 | "obama" | "romneyryan2012" | | 65 | "obama" | "romney" | | 56 | "voteobama" | "romneyryan" | | 42 | "voteobama" | "romney" | +--------------------------------------+ 5 rows 194 ms 4 Mittwoch, 11. September 13
  99. 99. Real World Use-Cases with Mittwoch, 11. September 13
  100. 100. (Neo4j) -[:LOVES]-> (Our Customers) 52 Mittwoch, 11. September 13
  101. 101. (Neo4j) -[:LOVES]-> (Our Customers) 52 Mittwoch, 11. September 13
  102. 102. Challenges with „Real World Use-Cases“ • hard to get permission to talk in public • complex domain models, challenging implementations • hard to get insights in implementation • challenges / feedback seldomly communicated • this presentation is a „best effort“ mix of – actual, – inferred, – adapted information 53 Mittwoch, 11. September 13
  103. 103. Airline: Media Asset Management 54 Mittwoch, 11. September 13
  104. 104. Airline: Media Asset Management • Many movies, music, tv-series • Each of them with publishers, publication rights • Permissions, Broadcasting rules • Asset Management/Tracking – also technical components, virtual containers • Streaming Box Management (What is where, Documentation) • Impact analytics of legal changes or program updates • Decision support system • Complex domain model 55 Mittwoch, 11. September 13
  105. 105. Airline: Media Asset Management (Technical) • Neo4j Embedded • SDN Advanced Mapping • REST Server with Spring WebMVC • Thymeleaf • Rich UI with – CRUD for all 50 elements – dependency network visualization, with interactive navigation – advanced query generator / console 56 Mittwoch, 11. September 13
  106. 106. Airline: Media Asset Management Metadata Route Airport IN ST AL MediaBox MediaBox Airport Country 57 Mittwoch, 11. September 13 Movie Recording REGULATES APPLIES_TO LE D Aircraft TV-Series APPLIES _TO LED TAL INS STORED_ON Aircraft Metadata Metadata
  107. 107. Airline: Media Asset Management 58 Mittwoch, 11. September 13
  108. 108. Airline: Media Asset Management 58 Mittwoch, 11. September 13
  109. 109. Airline: Media Asset Management 58 Mittwoch, 11. September 13
  110. 110. Airline: Media Asset Management 58 Mittwoch, 11. September 13
  111. 111. Airline: Media Asset Management 58 Mittwoch, 11. September 13
  112. 112. Junisphere: Complex structural document handling 59 Mittwoch, 11. September 13
  113. 113. Junisphere: Complex structural document handling • Business proccess to IT systems mapping (Exec View) • Conways Law – Business Process Structure resembles Information Architecture it runs on • Map and trace both –Initial and continous updates • Optimize both sides –Servers and Services • http://www.neotechnology.com/junispheres-usecase/ 60 Mittwoch, 11. September 13
  114. 114. Junisphere: Complex structural document handling •Junisphere AG is a Zurich-based IT solutions provider •Founded in 2001. Profitable. Self funded. •Software & services. •Novel approach to infrastructure monitoring: Starts with the end user, mapped to business processes and services, and dependent infrastructure 61 Mittwoch, 11. September 13
  115. 115. Junisphere: Complex structural document handling •“Business Service Management” requires mapping of complex graph, covering: business processes--> business services--> IT infrastructure •Embed capability of storing and retrieving this information into OEM application •Re-architecting outdated C++ application based on relational database, with Java 62 Mittwoch, 11. September 13
  116. 116. Junisphere: Complex structural document handling •Actively sought out a Java-based solution that could store data as a graph •Domain model is reflected directly in the database: •“No time lost in translation” •“Our business and enterprise consultants now speak the same language, and can model the domain with the database on a 1:1 ratio.” •Spring Data Neo4j strong fit for Java architecture 63 Mittwoch, 11. September 13
  117. 117. Publisher: Dictionary Translation Contract Handling • dictionary contents is created by many parties • for each contribution you have to track the contracts 64 Mittwoch, 11. September 13
  118. 118. Junisphere: eReality (technical) • Java Embedded Neo4j • Spring Data Neo4j • Integrated in Java Service Architecture • XML-Editor • Device/HW-Scanners report back model changes • Models are trees/networks, – need to merge model-updates – with inferred updates/deltas from full models 65 Mittwoch, 11. September 13
  119. 119. Junisphere: eReality (Model) Process Process DEPENDS_ON KPI Activity Activity DEPENDS_ON KPI Flow Model DEFINES DEPENDS_ON RELATES_TO Device Service FLOWS_TO Device RUNS_ON Function DEPENDS_ON KPI Mittwoch,66 September 13 11.
  120. 120. Our requirements > Convenient modelling of our domain > Pushing states from measurements in "real time" through the model (1000 times/s) > Versioning of the model > Multi tenancy support > Different views of the same model − Availability, performance, etc. views > Referencing properties of objects from other objects 67 Mittwoch, 11. September 13
  121. 121. Our requirements > Convenient modelling of our domain > Pushing states from measurements in "real time" through the model (1000 times/s) > Versioning of the model > Multi tenancy support > Different views of the same model − Availability, performance, etc. views > Referencing properties of objects from other objects 67 Mittwoch, 11. September 13 Perfect fit
  122. 122. Our requirements > Convenient modelling of our domain > Pushing states from measurements in "real time" through the model (1000 times/s) > Versioning of the model > Multi tenancy support > Different views of the same model − Availability, performance, etc. views > Referencing properties of objects from other objects 67 Mittwoch, 11. September 13 Perfect fit Proof of concept app with 2000 traversals/s
  123. 123. Our requirements > Convenient modelling of our domain Perfect fit > Pushing states from measurements in "real time" through the model (1000 times/s) Proof of concept app with 2000 traversals/s > Versioning of the model Proof of concept solution delivered by neo4jteam > Multi tenancy support > Different views of the same model − Availability, performance, etc. views > Referencing properties of objects from other objects 67 Mittwoch, 11. September 13
  124. 124. Our requirements > Convenient modelling of our domain > Pushing states from measurements in "real time" through the model (1000 times/s) > Versioning of the model > Multi tenancy support > Different views of the same model − Availability, performance, etc. views > Referencing properties of objects from other objects 67 Mittwoch, 11. September 13 Perfect fit Proof of concept app with 2000 traversals/s Proof of concept solution delivered by neo4jteam Done with indices per tenant and filtering traversal results
  125. 125. Our requirements > Convenient modelling of our domain > Pushing states from measurements in "real time" through the model (1000 times/s) > Versioning of the model > Multi tenancy support > Different views of the same model − Availability, performance, etc. views > Referencing properties of objects from other objects 67 Mittwoch, 11. September 13 Perfect fit Proof of concept app with 2000 traversals/s Proof of concept solution delivered by neo4jteam Done with indices per tenant and filtering traversal results Feasible
  126. 126. Our requirements > Convenient modelling of our domain > Pushing states from measurements in "real time" through the model (1000 times/s) > Versioning of the model > Multi tenancy support > Different views of the same model − Availability, performance, etc. views > Referencing properties of objects from other objects 67 Mittwoch, 11. September 13 Perfect fit Proof of concept app with 2000 traversals/s Proof of concept solution delivered by neo4jteam Done with indices per tenant and filtering traversal results Feasible Storing the properties in its own nodes
  127. 127. WhyOwnIt - Ownership Sharing Service 68 Mittwoch, 11. September 13
  128. 128. WhyOwnIt - Ownership Sharing Service • Sharing Culture –You own things you only seldomly need –You need things you don‘t own • Match needs and available devices/tools – add ratings, trust, recommendations – location based, close to you for pick-up • Startup 69 Mittwoch, 11. September 13
  129. 129. WhyOwnIt - Ownership Sharing Service Category Category OWNS Thing Person TRUST HAS NEEDS RATED Person RATED Person Person 70 Mittwoch, 11. September 13 OWNS Thing
  130. 130. WhyOwnIt - Ownership Sharing Service 71 Mittwoch, 11. September 13
  131. 131. WhyOwnIt - Ownership Sharing Service 71 Mittwoch, 11. September 13
  132. 132. WhyOwnIt - Ownership Sharing Service 71 Mittwoch, 11. September 13
  133. 133. WhyOwnIt - Ownership Sharing Service 71 Mittwoch, 11. September 13
  134. 134. WhyOwnIt - Ownership Sharing Service 71 Mittwoch, 11. September 13
  135. 135. WhyOwnIt - Ownership Sharing Service 71 Mittwoch, 11. September 13
  136. 136. WhyOwnIt - Ownership Sharing Service 72 Mittwoch, 11. September 13
  137. 137. Gamesys - Add Social to Gaming • Classical Pay and Win Games (Poker & Co) • Spring-Web-App with Oracle backend • Add Social – Referral System with complex rules for inferred bonuses – Multi-Level Buddy-System – Prevent Fraud – Add more social functions on top (Groups) – Recommendations • http://www.neotechnology.com/gamesys/ 73 Mittwoch, 11. September 13
  138. 138. Gamesys - Add Social to Gaming Player S AY L Player YS LA P P Round BUDDY BUD REF ERS S FER RE Player BUDDY DY BU D D Y Game Player 74 Mittwoch, 11. September 13 Player Player
  139. 139. Music Sharing/Discovery/Recommendation Service 75 Mittwoch, 11. September 13
  140. 140. Music Sharing/Discovery/Recommendation Service • Recommend new artists and songs to your users – take their previous listen-history into account – look at what‘s hot amongst their friends – infer broader selection via bands and genres • Detect duplicates using media-fingerprints – copyright infringements – de-duplicate data 76 Mittwoch, 11. September 13
  141. 141. Music Sharing/Discovery/Recommendation Service Song Song BY Label User LIS W OR K S_ W IT H Band TE NE D Artist Song 77 Mittwoch, 11. September 13 Song RATED Artist BY PU BL IS H ES FOLLOWS User
  142. 142. Music Sharing/Discovery/Recommendation Service 78 Mittwoch, 11. September 13
  143. 143. Other Use-Cases • Financial Services - Asset / Account Management • Bank - Permission Management and Authorization – Entitlement • Data Software Provider - Impact analysis of changes – Implication of changes on the company core asset: DATA – Change tracking – Root Cause Analysis 79 Mittwoch, 11. September 13
  144. 144. SAN/NAS Provider - Lifetime device tracking • Networked Storage Boxes – many components, disks, controllers, power supply, sensors • Tracking of measurement data • Impact analytics • Early detection of anomalies • Intelligent fail over • Huge number of domain entities (~450) – generating domain classes and repositories 80 Mittwoch, 11. September 13
  145. 145. Game Retailer • Buy and Download & Game on Demand • Fraud detection –delayed payments, charge backs, fradulent keys are invalid • Convert rules to traversals –co-occurrance of sudden large sales –fradulent e-mail patterns • Combination with Oracle Infrastructure • Cross-Store 81 Mittwoch, 11. September 13
  146. 146. Open Source Projects 82 Mittwoch, 11. September 13
  147. 147. Cineasts.net - a social movie database Check Out: http://spring.neo4j.org/tutorial Mittwoch, 11. September 13
  148. 148. Spring Data Neo4j Guidebook “Good Relationships” “I’m excited about Spring Data Neo4j.... makes working with Neo4j amazingly easy, and therefore has the potential to make you more successful as a developer.” Rod Johnson, founder of Spring - Spring Data Neo4j comes with a great Guide Book, featuring: - Forewords by Rod Johnson and Emil Eifrem An easy to read, narrative tutorial walkthrough for cineasts.net A comprehensive reference for all the details Check it out: http://bit.ly/sd-book Free e-book and printed Mittwoch, 11. September 13
  149. 149. Spring Data Neo4j Guidebook “Good Relationships” “I’m excited about Spring Data Neo4j.... makes working with Neo4j amazingly easy, and therefore has the potential to make you more successful as a developer.” Rod Johnson, founder of Spring - Spring Data Neo4j comes with a great Guide Book, featuring: - Forewords by Rod Johnson and Emil Eifrem An easy to read, narrative tutorial walkthrough for cineasts.net A comprehensive reference for all the details Check it out: http://bit.ly/sd-book Free e-book and printed Mittwoch, 11. September 13
  150. 150. Hubway Data Challenge - Import • Boston Bike Sharing Network • Import using Spring Data Neo4j • Visualization with Cypher & d3.js (Chord) http://bit.ly/neo_hubway 85 Mittwoch, 11. September 13
  151. 151. Agent Spring - Energy Market Modeling 86 Mittwoch, 11. September 13
  152. 152. Agent Smith - Energy Market Modeling • Research project (open source) • Model energy producers and consumers • Trace dependencies, prices, usage, demands, market activities • Simulate impact of changes over the course of several years • Sustainable energy vs. nuclear, private usage vs. industry demand • Used in Latvia for decision making in energy politics https://github.com/alfredas/AgentSpring 87 Mittwoch, 11. September 13
  153. 153. How do I get started? 4 Mittwoch, 11. September 13
  154. 154. How do I get started? ๏ Documentation 4 Mittwoch, 11. September 13
  155. 155. How do I get started? ๏ Documentation • http://spring.neo4j.org 4 Mittwoch, 11. September 13
  156. 156. How do I get started? ๏ Documentation • http://spring.neo4j.org • Developer-Notes 4 Mittwoch, 11. September 13
  157. 157. How do I get started? ๏ Documentation • http://spring.neo4j.org • Developer-Notes • Spring Data Book 4 Mittwoch, 11. September 13
  158. 158. How do I get started? ๏ Documentation • http://spring.neo4j.org • Developer-Notes • Spring Data Book • Good Relationships 4 Mittwoch, 11. September 13
  159. 159. How do I get started? ๏ ๏ Documentation • http://spring.neo4j.org • Developer-Notes • Spring Data Book • Good Relationships Get Neo4j 4 Mittwoch, 11. September 13
  160. 160. How do I get started? ๏ ๏ Documentation • http://spring.neo4j.org • Developer-Notes • Spring Data Book • Good Relationships Get Neo4j • http://neo4j.org/download 4 Mittwoch, 11. September 13
  161. 161. How do I get started? ๏ ๏ ๏ Documentation • http://spring.neo4j.org • Developer-Notes • Spring Data Book • Good Relationships Get Neo4j • http://neo4j.org/download Participate 4 Mittwoch, 11. September 13
  162. 162. How do I get started? ๏ ๏ ๏ Documentation • http://spring.neo4j.org • Developer-Notes • Spring Data Book • Good Relationships Get Neo4j • http://neo4j.org/download Participate • http://neo4j.org/forums 4 Mittwoch, 11. September 13
  163. 163. How do I get started? ๏ ๏ ๏ Documentation • http://spring.neo4j.org • Developer-Notes • Spring Data Book • Good Relationships Get Neo4j • http://neo4j.org/download Participate • http://neo4j.org/forums • http://spring.neo4j.org/discussions 4 Mittwoch, 11. September 13
  164. 164. How do I get started? ๏ ๏ ๏ Documentation • http://spring.neo4j.org • Developer-Notes • Spring Data Book • Good Relationships Get Neo4j • http://neo4j.org/download Participate • http://neo4j.org/forums • http://spring.neo4j.org/discussions • http://neo4j.meetup.com 4 Mittwoch, 11. September 13
  165. 165. How do I get started? ๏ ๏ ๏ Documentation • http://spring.neo4j.org • Developer-Notes • Spring Data Book • Good Relationships Get Neo4j • http://neo4j.org/download Participate • http://neo4j.org/forums • http://spring.neo4j.org/discussions • http://neo4j.meetup.com • a session like this one ;) 4 Mittwoch, 11. September 13
  166. 166. The book on your seat! -“Graph Databases” Written by experts - Emil Eifrem, Ian Robinson, Jim Webber Compliments of Neo Technology • The definitive guide on graph databases • discusses graph concepts, history and data model • compares with other NoSQL technologies • details use-cases from different domains • explains Neo4j‘s humane query language „Cypher“ Mittwoch, 11. September 13
  167. 167. Bookmark: GraphConnect Oct 3-4 2013 San Francisco $99 4 Mittwoch, 11. September 13 tick et c oup on in you rb ook
  168. 168. Meetup - Tomorrow (Wed) Evening Spring Data Neo4j: Past, Current & Future • Wed, Sep 11, 6-9PM • David's Restaurant, 5151 Stars and Stripes Drive • Just around the corner • Enjoy dessert, wine, beer • Chance to win a signed Spring Data Book http://www.meetup.com/graphdb-sf/events/138428012/ 91 Mittwoch, 11. September 13
  169. 169. Thank you ! Questions ? Mittwoch, 11. September 13
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×