I am currently a Neo4j user but am extremely interested in RedisGraph. I am currently working with graphs which have tens of millions of nodes and are growing rapidly. I am interested in RedisGraph but am hesitant to use it because of some of the limitations listed on the Cypher Support documentation page (https://oss.redislabs.com/redisgraph/cypher_support/).
I just wanted to ask several questions and see if someone might be able to provide some insights.
The RedisGraph benchmarks show it being about 600 times faster than Neo4j. Other than the fact that RedisGraph is written in C and Neo4j is written in Java, does anyone have an idea why RedisGraph is so much faster than Neo4j?
Much of the Cypher functionality is currently unsupported? Are there plans to eventually support this functionality? Is there any roadmap for this support?
Are there any plans to support the Bolt protocol?
Neo4j provides a mechanism to create functions and procedures which can be called directly from Cypher queries. Are there plans to support such functionality?
The Graph Algorithms and Awesome Procedures on Cypher (APOC) provide really great functionality. Are there plans to port/rewrite some or all of this functionality so that it can be available in RedisGraph?
There is currently no client for .NET. I would possibly be interested in helping to develop such a driver if there was someone to mentor me through the process so I can better understand what is required. Would anyone have interest in helping to guide me through the development of a .NET client?
The RedisGraph benchmarks show it being about 600 times faster than Neo4j. Other than the fact that RedisGraph is written in C and Neo4j is written in Java, does anyone have an idea why RedisGraph is so much faster than Neo4j?
RedisGraph takes a different approach when it comes to Graph storage representation, it uses sparse adjacency matrices and perform traversals using
matrix matrix multiplication which is highly parallelizable. Another reason is that, just as with all redis data structures, the data lives in memory first and durability is achieved via snapshotting / aof options.
Much of the Cypher functionality is currently unsupported? Are there plans to eventually support this functionality? Is there any roadmap for this support?
In our upcoming 2.0 release we changed our parser and query planner. This will allow us to close the gap to fully support cypher faster. If you could be more specific on which clauses you’re missing we can tell you if they’ll be part of the 2.0 release later this Q3.
Are there any plans to support the Bolt protocol?
No we don’t plan to do so at this moment. Redis comes with its own RESP protocol and we were able to create a similar efficient graph response format as defined here. By this we get a large ecosystem of clients that can be extended to work with redisgraph easily and a unified way of working with redis and all its modules. If there is any particular integration you’re currently missing, please contact pieter at redislabs dot com
Neo4j provides a mechanism to create functions and procedures which can be called directly from Cypher queries. Are there plans to support such functionality?
Yes, we have already done some designs on adding user defined procedures. This however won’t be part of the 2.0 release, but will come in one of the later releases of this year (2.2 / 2.4). Please take into account these procedures will need to be written in C initially until we or the community makes bindings to other languages that enable comparable performance (can’t resist, dropping Rust here as a good candidate).
The Graph Algorithms and Awesome Procedures on Cypher (APOC) provide really great functionality. Are there plans to port/rewrite some or all of this functionality so that it can be available in RedisGraph?
We are closely following up with https://github.com/GraphBLAS/LAGraph which is a collection of graph algorithms written against the GraphBLAS api. We have yet to decide how we will expose this.
There is currently no client for .NET. I would possibly be interested in helping to develop such a driver if there was someone to mentor me through the process so I can better understand what is required. Would anyone have interest in helping to guide me through the development of a .NET client?