github.com/scottcagno/storage@v1.8.0/cmd/index/main.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "io/fs" 6 "log" 7 "path/filepath" 8 "strings" 9 ) 10 11 var paths []string 12 13 func main() { 14 15 for i := 0; i < 3; i++ { 16 for j := 0; j < 5; j++ { 17 paths = append(paths, fmt.Sprintf("cmd/index/data/%.3d/data-%.3d.dat", i, j)) 18 } 19 } 20 21 doWrite := false 22 if doWrite { 23 for i := range paths { 24 mdb, err := OpenMockDB(paths[i]) 25 if err != nil { 26 log.Panic("open", err) 27 } 28 batch, err := makeAndWriteBatch(1, 256) 29 if err != nil { 30 log.Panic("make and write batch", err) 31 } 32 err = mdb.PutBatch(batch) 33 if err != nil { 34 log.Panic("put batch", err) 35 } 36 err = mdb.Close() 37 if err != nil { 38 log.Panic("close", err) 39 } 40 } 41 } 42 43 doRead := true 44 doScan := false 45 if doRead { 46 filepath.Walk("cmd/index/data", func(path string, fi fs.FileInfo, err error) error { 47 if !fi.IsDir() && strings.HasSuffix(fi.Name(), ".dat") { 48 path = filepath.ToSlash(path) 49 fmt.Printf("opening: %q, and counting records...\n", path) 50 mdb, err := OpenMockDB(path) 51 if err != nil { 52 return err 53 } 54 count := mdb.Count() 55 if doScan { 56 mdb.Scan(func(me *mockEntry) error { 57 if me == nil { 58 return IterStop 59 } 60 fmt.Printf("read record: %s\n", me) 61 return nil 62 }) 63 } 64 err = mdb.Close() 65 if err != nil { 66 return err 67 } 68 fmt.Printf("found %d, records.\n", count) 69 } 70 return nil 71 }) 72 } 73 } 74 75 func makeKey(i int) string { 76 return fmt.Sprintf("key-%.4d", i) 77 } 78 79 func makeVal(i int) string { 80 return fmt.Sprintf("value-%.16d", i*3) 81 } 82 83 func makeAndWriteBatch(n1, n2 int) (*Batch, error) { 84 batch := NewBatch() 85 for i := n1; i < n2; i++ { 86 err := batch.Write(makeKey(i), makeVal(i)) 87 if err != nil { 88 return nil, err 89 } 90 } 91 return batch, nil 92 }