/oktoplus

In memory K/V database

Primary LanguageC++

oktoplus

alt text

What is oktoplus

Oktoplus is a in-memory data store K:V where V is a container: std::list, std::map, boost::multi_index_container, std::set, you name it. Doing so the client can choose the best container for his own access data pattern.

If this reminds you of REDIS then you are right, I was inspired by it, however:

  • Redis is not multithread
  • Redis offers only basic containers
  • For instance the Redis command LINDEX is O(n), so if you need to access a value with an index would be better to use a Vector style container
  • There is no analogue of multi-set in Redis

Redis Commands Compatibility

Oktoplus specific containers (already implemented, see specific documentation)

The server exports a Grpc interface (https://grpc.io/). Refer to src/Libraries/Commands/commands.proto to see the exported interface, you can use it to build a client for your favourite language.

Server is multithread, two different clients working on different containers (type or name) have a minimal interaction. For example multiple clients performing a parallel batch insert on different keys can procede in parallel without blocking each other.

Road Map

  • Support all REDIS commands (at least the one relative to data storage)
  • Support the following containers: deque, list, map, multimap, multiset, set, unorderd_map, unordered_multimap, vector, boost::multi_index (up to at least 3 keys)
  • Make it distributed using RAFT as consensus protocol

How To Build