Nutsdb with golang

2021. 2. 9. 09:03
728x90

Go lang에서 Nuts라는 key-pair 방식의 db를 쓸 때가 있다.
참고 : https://github.com/xujiajun/nutsdb#getting-started

1. 다운받기

go get -u github.com/xujiajun/nutsdb

이 때 
package golang.org/x/sys/unix: golang.org/x/sys is a custom import path for https://go.googlesource.com/sys, but /home/ubuntu/go/src/golang.org/x/sys is checked out from https://github.com/golang/sys.git

위와 같은 메세지가 나타날 수 있는데

package의 출처가 다르다는 메세지다.

각각의 폴더에 들어가서 파일들이 제대로 들어가 있으면 문제 없는 듯.
cd src/github.com/xujiajun/netsdb 
cd src/golang.org/x/sys

github의 example 아래 basic/main.go 를 참고하여
(https://github.com/xujiajun/nutsdb/tree/master/examples/basic)
NutsDbHndler.go 를 만듬. package는 databases
참고1 : init() method는 인자가 없는 func로 생성하면 자동으로 처리 됨. 따로 호출할 필요 없음.
참고2 : nuts db의 method 선언 형태는 if err := func(); err != nil {     } 형태임
  err := func();
  if err != nil {}
위 형태의 변형임.
참고3 : fileDir 은 현재경로 기준으로 하려면 "./aaa" 등으로 하고
그 외에는 절대 경로임
참고4 : init() 함수 내에 os.RemoveAll 이 있으므로 자칫하면 해당 폴더의 Data가 모두 지워질 수 있으므로 "./data" 등의 해당 db파일만 저장되는 경로를 따로 마련할 것.

databases/NutsDbHandler.go

package databases

import (
    "fmt"
    "io/ioutil"
    "log"
    "os"

    "github.com/xujiajun/nutsdb"
)

var (
    db     *nutsdb.DB
    bucket string
)

func init() {
    log.Println("NutsDbHandler init start")
    opt := nutsdb.DefaultOptions
    fileDir := "./databases"

    files_ := ioutil.ReadDir(fileDir)
    for _f := range files {
        name := f.Name()
        if name != "" {
            fmt.Println(fileDir + "/" + name)
            err := os.RemoveAll(fileDir + "/" + name)
            if err != nil {
                panic(err)
            }
        }
    }
    opt.Dir = fileDir
    opt.SegmentSize = 1024 * 1024 // 1MB
    db_ = nutsdb.Open(opt)
    bucket = "bucket"
    log.Println("NutsDbHandler init end")
}

func delete(keyName string) {
    if err := db.Update(
        func(tx *nutsdb.Tx) error {
            key := []byte(keyName)
            return tx.Delete(bucket, key)
        }); err != nil {
        log.Fatal(err)
    }
}

func put(keyName, keyValue string) {
    if err := db.Update(
        func(tx *nutsdb.Tx) error {
            key := []byte(keyName)
            val := []byte(keyValue)
            return tx.Put(bucket, key, val, 0)
        }); err != nil {
        log.Fatal(err)
    }
}

func put2(keyName, keyValue string) {
    if err := db.Update(
        func(tx *nutsdb.Tx) error {
            key := []byte(keyName)
            val := []byte(keyValue)
            return tx.Put(bucket, key, val, 0)
        }); err != nil {
        log.Fatal(err)
    }
}

func read(keyName string) {
    if err := db.View(
        func(tx *nutsdb.Tx) error {
            key := []byte(keyName)
            eerr := tx.Get(bucket, key)
            if err != nil {
                return err
            }
            fmt.Println("val:"string(e.Value))
            return nil
        }); err != nil {
        log.Println(err)
    }
}

// 사용방법 ex
// import( db "src/databases")

// func main() {
//  //insert
//  db.put("name1", "value1")

//  //read
//  db.read("name1")

//  //delete
//  db.delete("name1")

//  //read
//  db.read("name1")

//  //insert
//  db.put("name1", "value1")

//  //read
//  db.read("name1")

//  //update
//  db.put2("name1", "value2")

//  //read
//  db.read("name1")

// }

 

 

 

728x90
BLOG main image
"그게 뭐 어쨌다는 거냐?" 늘 누가 나에게 나에대한 말을할 때면 이말을 기억해라. by nobang

카테고리

nobang이야기 (1951)
Life With Gopro (7)
Life With Mini (79)
Diary (971)
너 그거 아니(do you know) (179)
난 그래 (159)
Study (290)
속지말자 (10)
Project (34)
Poem (15)
Song (0)
Photo (113)
낙서장 (45)
일정 (0)
C.A.P.i (2)
PodCast (0)
nobang (27)
고한친구들 (4)
recieve (0)
History (0)
android_app (2)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

Total :
Today : Yesterday :