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  }