github.com/nutsdb/nutsdb@v1.0.4/examples/batch/put/main.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  
     7  	"github.com/nutsdb/nutsdb"
     8  	"github.com/xujiajun/utils/strconv2"
     9  	"github.com/xujiajun/utils/time2"
    10  )
    11  
    12  var (
    13  	db     *nutsdb.DB
    14  	bucket string
    15  )
    16  
    17  func init() {
    18  	db, _ = nutsdb.Open(
    19  		nutsdb.DefaultOptions,
    20  		nutsdb.WithDir("/tmp/nutsdbexample/example_batch"),
    21  		// nutsdb.WithRWMode(nutsdb.MMap),
    22  		// nutsdb.WithSyncEnable(false),
    23  	)
    24  }
    25  
    26  func createBucket() {
    27  	if err := db.Update(
    28  		func(tx *nutsdb.Tx) error {
    29  			return tx.NewBucket(nutsdb.DataStructureBTree, "bucket1")
    30  		}); err != nil {
    31  		//log.Fatal(err)
    32  	}
    33  }
    34  
    35  func main() {
    36  	time2.Start()
    37  
    38  	bucket = "bucket1"
    39  	// create bucket first
    40  	createBucket()
    41  	end := 1
    42  
    43  	for j := 1; j <= end; j++ {
    44  		if err := db.Update(
    45  			func(tx *nutsdb.Tx) error {
    46  				for i := (j - 1) * 10000; i < j*10000; i++ {
    47  					key := []byte("namename" + strconv2.IntToStr(i))
    48  					val := []byte("valvalvavalvalvalvavalvalvalvavalvalvalvaval" + strconv2.IntToStr(i))
    49  					if err := tx.Put(bucket, key, val, 0); err != nil {
    50  						return err
    51  					}
    52  				}
    53  				return nil
    54  			}); err != nil {
    55  			log.Fatal(err)
    56  		}
    57  	}
    58  
    59  	fmt.Println("batch put data cost: ", time2.End())
    60  
    61  	time2.Start()
    62  	wb, err := db.NewWriteBatch()
    63  	if err != nil {
    64  		fmt.Println("NewWriteBatch() fail, err=", err)
    65  	}
    66  	N := 10000
    67  	for i := 0; i < N; i++ {
    68  		key := []byte("namename" + strconv2.IntToStr(i))
    69  		val := []byte("valvalvavalvalvalvavalvalvalvavalvalvalvaval" + strconv2.IntToStr(i))
    70  		if err := wb.Put(bucket, key, val, 0); err != nil {
    71  			fmt.Println("batch write entry fail, err=", err)
    72  			log.Fatal(err)
    73  		}
    74  	}
    75  	if err := wb.Flush(); err != nil {
    76  		fmt.Println("batch write flush fail, err=", err)
    77  	}
    78  	fmt.Printf("Time taken via batch write: %v\n", time2.End())
    79  
    80  	time2.Start()
    81  	if err := wb.Reset(); err != nil {
    82  		fmt.Println("batch write Reset fail, err=", err)
    83  	}
    84  	for i := 0; i < N; i++ {
    85  		key := []byte("namename" + strconv2.IntToStr(i))
    86  		if err := wb.Delete(bucket, key); err != nil {
    87  			fmt.Println("batch delete entry fail, err=", err)
    88  			log.Fatal(err)
    89  		}
    90  	}
    91  	if err := wb.Flush(); err != nil {
    92  		fmt.Println("batch delete flush fail, err=", err)
    93  	}
    94  	fmt.Printf("Time taken via batch delete: %v\n", time2.End())
    95  }