An Atomic Graphlet—Graph Logical Inference Database Engine Prototype.
Written in Julia.
Q. Why is it called Novempuss?
A. Because it is the new little brother of Octopoes.
Q. What is a "graphlet"?
A. A subgraph, that contains the relevant information about the graph you are working with.
Q. What is "Atomic"?
A. It means that graphlets can be processed in parallel.
Q. Is Novempuss parallelized?
A. No not yet, but in principle it can be — and it might be.
Q. What is "Logical Inference"?
A. It means that new vertices in the graph are generated by logical rules provided by the user. Any graphlet, is always fully inferred.
Q. Why is it a "Prototype"?
A. Novempuss is a prototype for improvements to Octopoes the graph database powering OpenKAT.
Q. Why is it an "Engine"?
A. This project does not aim to be a full fledged database, but is rather a set of algorithms that allow a database solution to be built upon.
Q. Is Novempuss stable?
A. No, it is currently under heavy initial development. It is the aim to become more stable eventually, but like every project it will be a work in progress.
Q. Why is it written in Julia?
A. Novempuss is a mathy project with a need for speed. Julia, is in short, everything a math oriented C/C++ developer wished Python would have been:
- Julia is fast (High performance unlike Python),
- Easy to use (very productive unlike C/C++),
- Interoperable (you can easily interface it with your favorite language),
- Has easy to utilize parallelism, acceleration and distribution (Uncommon),
- A great math oriented community (Matlab/R).
Hence a perfect candidate.
For usage:
] add https://github.com/originalsouth/Novempuss.git
For development:
using Pkg
Pkg.develop(url = "https://github.com/originalsouth/Novempuss.git")
Install extra dependencies:
] add BenchmarkTools CairoMakie GraphMakie GraphPlot PlotGraphviz Pluto ProfileView Revise SimpleWeightedGraphs Test
To be done. See tests and examples for now.
- Implement a MethodSet dispatcher for rule based inference
- Implement basic
Graphlet
structure with corresponding routines - Create
LogicalGraph
structure as database structure to storeGraphlets
with common routines- Allow addition/deletion of nodes and rules
- Find node's
Graphlet
's - Find neighbors of a node (up to n-th order)
- Find shortest path between nodes (if any)
- Add
Graphlet
merge caching optimizations - Add transaction history
- Extend with optional use of parallelism CPU/GPU
- Add serializations (for storage)
- Add documentation
- Add testing
- Implement some basic tests
- Harden and extend testing and measure coverage
- Add examples
- Some basic examples in Pluto
- Have fun with the Collatz conjecture
- Have fun with L-Systems
- Have fun in the kitchen
- Create a benchmark suite to test and enhance performance
Meanwhile there will also be the usual bug zapping, code and performance optimizing, and discussions.
Please! Feel free to discuss make an issue or create a pull request.
Thanks to @underdarknl for good discussions and inspirations, @brennodewinter for the endorsements and the inspiring OpenKAT team. Thanks to the colleagues at CIMSOLUTIONS.