The unreliable key-value store
Originally, from my article "Why you should build your own NoSQL Database". BoJack is a bit mature now, yet missing several important features:
- Cluster-friendliness
- Security Layer (#34)
- Unix Socket support (#48)
Feel free to share your thoughts and contribute.
Requirements
- The latest version of Crystal (0.24.x)
- LLVM development files
Steps
- Clone the repo:
git clone https://github.com/marceloboeira/bojack
- Switch to repo-directory:
cd bojack
- Build:
make install
(sudo for linux users)
- Start the server, run:
bojack server
- Connect a client, in another tab, run:
bojack client
$ bojack console
> set food 🍣
🍣
> get food
🍣
> ping
pong
By default BoJack runs at 127.0.0.1:5000.
Currently the command-line interface supports two commands: server
and console
.
bojack <server/console> <flags>
flag | description | |
---|---|---|
--hostname | Hostname the server will run | 127.0.0.1 |
--port | Port the server will run | 5000 |
--log | Path for a log file | STDOUT |
--log-level | Level of messages logged | DEBUG = 0, INFO = 1 (default), WARN = 2, ERROR = 3, FATAL = 4 |
flag | description | default |
---|---|---|
--hostname | Hostname this console will connect | 127.0.0.1 |
--port | Port this console will connect | 5000 |
List of available commands for BoJack
command | description | params | example | return |
---|---|---|---|---|
set | sets a key with the given name and value | key, value | set foo bar |
the value of the key "bar" |
increment | increments the given key value by 1 | key | increment foo |
the value of the key "foo" incremented |
get | gets the value of the given value | key | get foo |
the value stored at the key, "bar" |
delete | deletes the given key | key, * | delete foo, delete * |
the value at the deleted key "bar" or every key in the database, if "*" is given instead of a key |
append | add one or more values to the end of a list | key, value | append list foo,bar |
the list resulted |
pop | retrieve the last item of the list | key | pop foo |
the last value stored at the list, "foo" |
size | return the number of stored items | -- | size |
the value of stored keys in memory |
ping | checks the server | -- | ping |
pong if everything is correct |
Want to use BoJack with your language? Currently, we support:
- Crystal - Thanks to @hugoabonizio
- Python - Thanks to @mauricioabreu
- Ruby - Thanks to @hugoabonizio
- Elixir - Thanks to @veelenga
Found a bug? Have a suggestion? Please open an issue.
Want to contribute? Take a look at our open issues and make sure you follow our guide.
Check the License here.