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  }