最近學習go語言,發現一個GO語言版的LevelDB,簡單的測試了一下,發現性能還可以,但是它只有本地訪問接口,無法遠程連接和訪問,於是就有了下面這個項目TaoDB給goleveldb加了一個TCP的訪問外殼
1.下載項目
go get github.com/syndtr/goleveldb/leveldb
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[:])
}
}
}
}