github.com/nutsdb/nutsdb@v1.0.4/examples/k-v/multioprations/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  	// When we use tx.MSet, we must use even number of []byte as its parameters.
    48  	// When i is an even number, the no.i arg and the no.i+1 arg will be a pair of K-V.
    49  	// If there're odd number of args, it will throw an error
    50  	mSet([]byte("1")) //  parameters is used to represent key value pairs and cannot be odd numbers
    51  
    52  	// Normally, we use tx.MSet and tx.MGet to do some multiple operations.
    53  	mSet([]byte("1"), []byte("one"), []byte("2"), []byte("two"))
    54  	// get value by MGet, the  0  value is: 'one'
    55  	// get value by MGet, the  1  value is: 'two'
    56  	mGet([]byte("1"), []byte("2"))
    57  }
    58  
    59  func mGet(key ...[]byte) {
    60  	if err := db.View(func(tx *nutsdb.Tx) error {
    61  		values, err := tx.MGet(bucket, key...)
    62  		if err != nil {
    63  			return err
    64  		}
    65  		for i, value := range values {
    66  			log.Printf("get value by MGet, the %d value is '%s'", i, string(value))
    67  		}
    68  		return nil
    69  	}); err != nil {
    70  		log.Println(err)
    71  	}
    72  }
    73  
    74  func mSet(args ...[]byte) {
    75  	if err := db.Update(func(tx *nutsdb.Tx) error {
    76  		return tx.MSet(bucket, nutsdb.Persistent, args...)
    77  	}); err != nil {
    78  		log.Println(err)
    79  	}
    80  }