Skip to content

An Atomic Graphlet—Graph Logical Inference Database Engine Prototype

License

Notifications You must be signed in to change notification settings

originalsouth/Novempuss

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Novempuss

An Atomic Graphlet—Graph Logical Inference Database Engine Prototype.

Written in Julia.

Introduction

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.

Installation

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

Basic Usage

To be done. See tests and examples for now.

Roadmap

  • Implement a MethodSet dispatcher for rule based inference
  • Implement basic Graphlet structure with corresponding routines
  • Create LogicalGraph structure as database structure to store Graphlets 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
  • Create a benchmark suite to test and enhance performance

Meanwhile there will also be the usual bug zapping, code and performance optimizing, and discussions.

Contribute

Please! Feel free to discuss make an issue or create a pull request.

Acknowledgements

Thanks to @underdarknl for good discussions and inspirations, @brennodewinter for the endorsements and the inspiring OpenKAT team. Thanks to the colleagues at CIMSOLUTIONS.

About

An Atomic Graphlet—Graph Logical Inference Database Engine Prototype

Topics

Resources

License

Stars

Watchers

Forks

Languages