mondis
started as kvrpc
to be a universal rpc layer for any key value database, but as it evolves, mondis
now also aims to bridge the gap between a document-oriented database and a key value database!
- full
key value database api
Set
Exists
Get
Delete
Scan
Update
(writable transaction)View
(readonly transaction)
document-oriented database api
like mongodb (in progress)
Refer to mondis.Client
or test cases
for details.
mondis
is based on qrpc
.
This is how to start a server with a badger provider:
package main
import (
"github.com/zhiqiangxu/mondis/provider"
"github.com/zhiqiangxu/mondis/server"
)
const (
addr = "localhost:8099"
dataDir = "/tmp/mondis"
)
func main() {
// use badger provider
kvdb := provider.NewBadger()
// create a mondis server
s := server.New(addr, kvdb, server.Option{}, mondis.KVOption{Dir: dataDir})
// start the server
s.Start()
}
This is how to request the server from a client:
package main
import (
"github.com/zhiqiangxu/mondis/client"
"github.com/zhiqiangxu/mondis/kv"
"bytes"
)
func main() {
// create a mondis client
c := client.New(addr, client.Option{})
// test Set
key1 := []byte("key1")
value1 := []byte("value1")
_ = c.Set(key1, value1, nil)
// test Get
v, _, _ := c.Get(key1)
if !bytes.Equal(v, value1) {
panic("return value not expected")
}
// test Delete
err = c.Delete(key1)
// test Get when key not exists
_, _, err = c.Get(key1)
if err != kv.ErrKeyNotFound {
panic("shoud got kv.ErrKeyNotFound if key not exists")
}
// test Update transaction
key2 := []byte("key2")
value2 := []byte("value2")
_ = c.Update(func(txn mondis.Txn) error {
_ = txn.Set(key2, value2, nil)
v, _, _ := txn.Get(key2)
if !bytes.Equal(v, value2) {
panic("return value not expected")
}
_ = txn.Delete(key2)
return nil
})
// test Read transaction
key3 := []byte("key3")
value3 := []byte("value3")
err = c.Set(key3, value3, nil)
err = c.View(func(txn mondis.Txn) error {
v, _, _ := txn.Get(key3)
if !bytes.Equal(v, value3) {
panic("return value not expected")
}
return nil
})
}
The above shows how to use the key value database api
.
The document-oriented database api
is under active development, so keep tuned!!!