GithubHelp home page GithubHelp logo

chungquantin / solomon-db Goto Github PK

View Code? Open in Web Editor NEW
45.0 4.0 1.0 1.45 MB

An embedded Gremlin-compatible graph database written in Rust

Home Page: https://nomadiz.github.io/solomon-db

License: MIT License

Rust 100.00%
distributed graph-database rust gremlin rocksdb database solomon solomon-db embedded-database

solomon-db's Introduction

A distributed Gremlin-compatible graph database (In development 🚧)

Open for contribution πŸš€


Β  Β  Β 

Β  Β 

What is SolomonDB?

SolomonDB is an open source, distributed, easy-to-use, user friendly graph database built by nomadic engineers. SolomonDB enhances the experience of working with graph database using GQL (Gremlin Query Language). SolomonDB can run in an offline mode and acts as an embedded graph database on top of RocksDB. Last but not least, SolomonDB is a database for community. It supports multiple storage layer with a set of plugins for serialization.

Why is it named "Solomon"?

Solomon is the name of a the wisest person who ever lived, King Solomon. If you have ever read Bible, you might know some stories of King Solomon. One of those stories is when King Solomon asks for wishdom. Based on that idea, Solomon DB is built as my personal side project to gain more knowledge about database internals and graph database architecture.

Roadmap

The road map of SolomonDB will include:

  • Implement RocskDB storage layer
  • Implement Redb storage layer
  • Add protobuf and enable single-node mode.
  • Database server
  • Embedded library
  • Support Gremlin query language
  • Multi-row, multi-table ACID transactions
  • Single-node, or highly-scalable distributed mode
  • Store structured and unstructured data
  • Client (JS / Rust / Go) library

The mission of SolomonDB is to make graph traversal become easier, aim at plug-and-play database that can run directly in client app.

Documentation

For guidance on installation, development, deployment, and administration, see our SolomonDB documentation.

The documentation page is built using Rust Mdbook. Shoutout to Rust ecosystem.

Community

solomon-db's People

Contributors

chungquantin avatar tin-snowflake avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

guangminglion

solomon-db's Issues

Implement single-node database server using Protobuf

Is your feature request related to a problem? Please describe.
Apart from being as an embedded storage, SolomonDB can support Gremlin query on a single-node database server. We will build client libraries for high level languages to communicate with the server via gRPC. The server should be containerized for a simple setup and installation.

Describe the solution you'd like
Need to parse Gremlin command from string format to bytecode format and send to SolomonDB server for Step execution.

Gremlin: Enhance performance of reuse graph traversal source

Is your feature request related to a problem? Please describe.

let t1 = db
		.traverse()
		.v(1)
		.add_v("person")
		.property("github", "tin-snowflake")
		.property("name", "Tin Chung")
		.property("age", 21)
		.add_v("coder")
		.property("github", "chungquantin")
		.property("age", 30);

let t2 = t1.clone().has_key("github").has_label("person").exec().to_list().await.unwrap();
let t3 = t1.clone().has_key("github").exec().to_list().await.unwrap();
let t4 = t1.clone().has_not("name").exec().next().await.unwrap();

Describe the solution you'd like
For now, query like this is exhaustive. Even though t1 is reused, all steps are handled again whenever t2, t3 or t4 called. Can implement a record checkpoint to enhance the situation

Gremlin: Handle E() and addE() steps

Is your feature request related to a problem? Please describe.

  • E(): The E()-step is meant to read edges from the graph and is usually used to start a GraphTraversal. Unlike the related V() it cannot be used mid-traversal.
  • AddE(): Reasoning is the process of making explicit what is implicit in the data. What is explicit in a graph are the objects of the graph — i.e. vertices and edges. What is implicit in the graph is the traversal. In other words, traversals expose meaning where the meaning is determined by the traversal definition. For example, take the concept of a "co-developer." Two people are co-developers if they have worked on the same project together. This concept can be represented as a traversal and thus, the concept of "co-developers" can be derived. Moreover, what was once implicit can be made explicit via the addE()-step (map/sideEffect).

Describe the solution you'd like
Add step handler in process/exec.rs and collect method for edges in process/collector.rs

Additional context
Handle token terminator and source step streaming happens with property step

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.