最近学习go语言,发现一个GO语言版的LevelDB,简单的测试了一下,发现性能还可以,但是它只有本地访问接口,无法远程连接和访问,于是就有了下面这个项目TaoDB给goleveldb加了一个TCP的访问外壳
1.下载项目
go get github.com/markusleevip/taodb
2.启动服务
cd taodb
./build.sh
./taodbd -dbPath=/data/storage/taodb -port=:7398
3.运行客户端测试
cd taodb
./taodb -ip=127.0.0.1 -port=:7398
运行结果:
4.客户端代码(实例)
请参考:
https://github.com/markusleevip/taodb/blob/master/main/taodb/taodb.go
package main
import (
"encoding/json"
"fmt"
"github.com/markusleevip/taodb/client"
"github.com/markusleevip/taodb/log"
)
// GLOBALS
var (
opts *Options
)
func main() {
opts = parseArgs()
// init logging
log.LogTo(opts.logto, opts.loglevel)
client := client.New(opts.ip + opts.port)
// 向DB写入数据
for i := 0; i < 100; i++ {
client.Set(fmt.Sprintf("hello%d", i), []byte(fmt.Sprintf("Hello World!%d", i)))
}
// 从DB读取数据,get方式
for i := 0; i < 100; i++ {
value, _ := client.Get(fmt.Sprintf("hello%d", i))
log.Info("get key:hello%d,value=%s\n", i, string(value[:]))
}
// 通过关键字过滤数据,这里一次性读取全局数据,如果数据量较大,速度慢
ctx, _ := client.Prefix("hello")
if len(ctx) == 0 {
log.Info("ctx is null")
} else {
fmt.Println("cit is not null")
data := make(map[string]string)
err := json.Unmarshal(ctx, &data)
if err != nil {
log.Error("json error:", err)
}
if len(data) > 0 {
for key, value := range data {
log.Info("pre.key=%s,%s\n", key, value)
}
}
}
// 通过关键字过滤数据,这里只读取key值,实际数据使用client.Get(key)方法读取,推荐使用
ctx, _ = client.PrefixOnlyKey("hello")
if len(ctx) == 0 {
log.Info("ctx is null")
} else {
data := make([]string, 0)
err := json.Unmarshal(ctx, &data)
if err != nil {
log.Error("json error:", err)
return
}
if len(data) > 0 {
log.Info("data.len=%d", len(data))
for i, key := range data {
log.Info("pre.i=%d,key=%s", i, key)
value, _ := client.Get(key)
log.Info("getValue=%s", value[:])
}
}
}
}