ftsrg / ingraph

Incremental view maintenance for openCypher graph queries.
http://docs.inf.mit.bme.hu/ingraph/
Eclipse Public License 1.0
47 stars 10 forks source link

Implement naive relational engine #212

Closed szarnyasg closed 5 years ago

szarnyasg commented 7 years ago

nre should use Akka and utilise multiple CPU cores, but should not use expensive caching like Rete does.

There are relational algebra nodes that have no use of caching, e.g. selection and projection nodes. We call these stateless nodes (L). Others that can utilise caching called stateful nodes (F).

We currently have the following nodes:

There are many more to come: evaluating CASE expressions, creating list comprehensions, pattern comprehensions (!), etc.

szarnyasg commented 6 years ago

I my opinion, this task can be approached in many ways. To get the requirements straight, we would like to implement a non-incremental relational engine that

So we need a parallel, memory-efficient solution. I'd approach this like this:

  1. Actor model: extend the current IRE implementation with stateless nodes. Note that these nodes will only send positive updates (as there is nothing to maintain). We have a termination protocol for the Rete nodes that will work for non-incremental ones as well. Once we get the results from the network, we can simply throw away the network.
  2. Functional programming approach: create an immutable view of the data (the indexers) an use clever FP constructs for processing it.
szarnyasg commented 5 years ago

Postponing this into infinity.