/escanor

High performance key value database with useful json document indexing and manipulations.

Primary LanguageRustMIT LicenseMIT

logo

Welcome to the Escanor

Escanor is a high performance database with sled as the persistence layer and implement the redis protocol with useful additions for json data manipulations. This is a side project with the vision of making it into a major project any contributors are welcome.

Features

  • High Performance

  • Non Blocking Key-Value

  • Asynchronous Server

  • Support for Json Document Manipulations

  • Works with Redis Clients and Libraries

  • Client Cli included.

Download the latest release from the release page, binaries are available for Windows, Mac and Linux.

Installation instructions are available in the wiki page

Supported commands: randomkey,info,dbsize,bgsave,auth,lastsave,persist,expire,expireat,set,get,getset,del,get,ttl,geoadd,geodel,georem,georadius,georadiusbymember ,geohash,geojson,jsetr,jset,jget,jpath,jmerge,jincrby checkout the wiki page on how to use these commands WIKI PAGE

Run

git clone https://github.com/mambisi/escanor.git
cd escanor
cargo run --bin escanor-server
cargo run --bin escanor-cli

0.1.5 Features

New cli with pretty formatted json and colored json output

logo

New Commands

  • RANDOMKEY
  • INFO
  • DBSIZE
  • AUTH
  • LASTSAVE
  • PERSIST
  • EXPIRE
  • EXPIREAT
  • GETSET
  • TTL
  • JINCRBY
  • JSETR

Changes

JSETR now set raw json

JSETR user.0 `{"name" : "escanor"}`

JSET is used for builder style json creation making it easier to create json form the command line

Example :

{
"name" : "escanor",
"todos" : [
    { "item" : "Wash",
       "completed" : false
    },
    { "item" : "Code",
       "completed" : false
    }
   ]
}

Can dynamical be built with JSET

JSET user name "escanor" todos.+.item "Wash" todos.>.completed false todos.+.item "Code" todos.>.completed false

JSET can be used to change json even inner array

JSET user todos.1.completed true

JGET

JGET user

outputs

{
"name" : "escanor",
"todos" : [
    { "item" : "Wash",
       "completed" : false
    },
    { "item" : "Code",
       "completed" : true
    }
   ]
}

JGET can be used to select specific part of a json object

JGET user todos

outputs

[
  { "item" : "Wash",
       "completed" : false
   },
   { "item" : "Code",
       "completed" : true
   }
]