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 }