7

We have developed custom and proprietary Software for Route Optimization, using Neo4J as our Graph DB. We also developed few plugins and unmanaged Extensions in Java, that implement specific Business Logic whenever search is done on the Graph. Since we are facing severe Performance Issues with Neo4J, we are considering to migrate our proprietary Software from Neo4J to DataStaX DSE 5.0 Graph. But would like to evaluate DSE Graph initially.

We have few specific questions regarding Migration Path from Neo4J --> DataStax Graph DB

  1. How to migrate data from Neo4J to DataStax Graph DB?
  2. What are the changes we need to make in Neo4J Cypher Code in our Application so that it will work on DataStax DSE Graph DB?
  3. We have developed some Plugins/Unmanaged Extensions in Neo4J using Java which have lots of core business rules incorporated into Neo4J. Our business logic code in Java gets called whenever Neo4J searches/traverses graph database. Does DataStax DSE Graph support something similar to plugins and/or unmanaged Extensions?

We would like to see what it takes to migrate our existing Neo4J Java code to DataStax DSE Graph code. We need to determine the level of effort would involved to do this exercise before we could be up and running on DataStax DSE Graph.

stephen mallette
  • 45,298
  • 5
  • 67
  • 135
Auro
  • 81
  • 2
  • 5
    How do you expect your Java-based traversals to be faster in a distributed database than in Neo4j? In other words, if you're doing everything correctly, you're chasing pointers around an SSD (worst case) or in memory with Neo4j. In DSE graph, you're gonna be going over the network... – Michal Bachman Jul 28 '16 at 21:14
  • 3
    DSE Graph is built to take advantage of the underlying datastore Cassandra. Cassandra, being a partition based column family store, can eliminate many network hops by simply giving your traversals a key. Cassandra also gives you linear scaling on reads and writes and masterless architecture (continuous availability). These are things only a truly distributed system can give you. Distributed systems are the future! Embrace it brother :) – MarcintheCloud Jul 29 '16 at 03:04
  • 2
    OK, I'm gonna try a different approach then :) @Auro, have you identified what causes your "severe performance issues"? – Michal Bachman Jul 29 '16 at 14:32

1 Answers1

2

This might help: http://www.tinkerpop.com/docs/3.0.0.M1/#neo4j-gremlin

You can essentially connect to your Neo4J instance via the gremlin console, get the data you'd like, and write it out to a file that can be loaded into DSE Graph. That looks something like

graph.io(IoCore.gryo()).writeGraph("tinkerpop-modern.kryo"); 

See: http://www.tinkerpop.com/docs/3.0.0.M1/#gremlin-kryo

There's a lot to your question, especially around design, that can't be accurately answered in a StackOverflow post since a lot of it is specific to your use case. I suggest reaching out to DataStax directly for those questions, they'll be happy to help. That being said, I will be upfront with you, Neo4J and DSE Graph are very different systems. As such, you may have to rethink schema design as well as application code design.

If you're already familiar with Cassandra, that helps quite a bit around the architecture side. Even so, I do recommend checking out some of the free training around DSE Graph, specifically: https://academy.datastax.com/courses/ds330-datastax-enterprise-graph

MarcintheCloud
  • 1,643
  • 9
  • 9