github.com/nutsdb/nutsdb@v1.0.4/examples/k-v/append/main.go (about) 1 package main 2 3 import ( 4 "github.com/nutsdb/nutsdb" 5 "io/ioutil" 6 "log" 7 "os" 8 ) 9 10 var ( 11 db *nutsdb.DB 12 bucket string 13 err error 14 ) 15 16 func init() { 17 fileDir := "/tmp/nutsdb_example" 18 19 files, _ := ioutil.ReadDir(fileDir) 20 for _, f := range files { 21 name := f.Name() 22 if name != "" { 23 err := os.RemoveAll(fileDir + "/" + name) 24 if err != nil { 25 panic(err) 26 } 27 } 28 } 29 db, _ = nutsdb.Open( 30 nutsdb.DefaultOptions, 31 nutsdb.WithDir(fileDir), 32 nutsdb.WithSegmentSize(1024*1024), // 1MB 33 ) 34 if err != nil { 35 panic(err) 36 } 37 bucket = "bucketForString" 38 39 if err := db.Update(func(tx *nutsdb.Tx) error { 40 return tx.NewBucket(nutsdb.DataStructureBTree, bucket) 41 }); err != nil { 42 log.Fatal(err) 43 } 44 } 45 46 func main() { 47 // If we use tx.Append on a non-exist key, it will create a pair of K-V and use the appendage as its value. 48 append("non-exist", "something") 49 get("non-exist") // get value: 'something' 50 51 // If we use tx.Append on an exist key, it will append the given appendage to the existed value. 52 put("key", "value") 53 append("key", "more value") 54 get("key") // get value: 'valuemore value' 55 } 56 57 func get(key string) { 58 if err := db.View(func(tx *nutsdb.Tx) error { 59 value, err := tx.Get(bucket, []byte(key)) 60 if err != nil { 61 return err 62 } 63 log.Printf("get value: '%s'", string(value)) 64 return nil 65 }); err != nil { 66 log.Println(err) 67 } 68 } 69 70 func put(key, value string) { 71 if err := db.Update(func(tx *nutsdb.Tx) error { 72 return tx.Put(bucket, []byte(key), []byte(value), nutsdb.Persistent) 73 }); err != nil { 74 log.Println(err) 75 } 76 } 77 78 func append(key, appendage string) { 79 if err := db.Update(func(tx *nutsdb.Tx) error { 80 return tx.Append(bucket, []byte(key), []byte(appendage)) 81 }); err != nil { 82 log.Println(err) 83 } 84 }