github.com/scottcagno/storage@v1.8.0/cmd/lsmt/main.go (about)

     1  package main
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  	"github.com/scottcagno/storage/pkg/lsmt"
     7  	"log"
     8  	"path/filepath"
     9  	"strconv"
    10  )
    11  
    12  func main() {
    13  
    14  	defer myRecoverFunc()
    15  
    16  	conf := lsmt.DefaultConfig("cmd/lsmt/data")
    17  	// open LSMTree
    18  	db, err := lsmt.OpenLSMTree(conf)
    19  	if err != nil {
    20  		panic(err)
    21  	}
    22  	defer db.Close()
    23  
    24  	// write data
    25  	err = db.Put("key-01", []byte("value-01"))
    26  	if err != nil {
    27  		panic(err)
    28  	}
    29  
    30  	// write data with "int" key
    31  	err = db.Put(strconv.Itoa(2), []byte("value-02"))
    32  	if err != nil {
    33  		panic(err)
    34  	}
    35  
    36  	// isolate key
    37  	key := "key-01"
    38  
    39  	// read data (get first entry)
    40  	val, err := db.Get(key)
    41  	if err != nil {
    42  		panic(err)
    43  	}
    44  	fmt.Printf("get(%q): %s\n", key, val)
    45  
    46  	// check the "has"
    47  	ok := db.Has(key)
    48  	fmt.Printf("has(%q)=%v\n", key, ok)
    49  
    50  	// read data (from "int" key, aka the second entry)
    51  	val, err = db.Get(strconv.Itoa(2))
    52  	if err != nil {
    53  		panic(err)
    54  	}
    55  	fmt.Printf("get(%d): %s\n", 2, val)
    56  
    57  	// delete first entry
    58  	err = db.Del(key)
    59  	fmt.Printf("del(%q) (error=%v)\n", key, err)
    60  
    61  	// check the "has"
    62  	ok = db.Has(key)
    63  	fmt.Printf("has(%q)=%v\n", key, ok)
    64  
    65  	// check the "has"
    66  	ok = db.Has("some other key")
    67  	fmt.Printf("has(%q)=%v\n", "some other key", ok)
    68  
    69  	// try to find deleted entry
    70  	val, err = db.Get(key)
    71  	if err == nil {
    72  		panic(err)
    73  	}
    74  	fmt.Printf("get(%q): %v\n", key, val)
    75  
    76  	// close LSMTree
    77  	err = db.Close()
    78  	if err != nil {
    79  		panic(err)
    80  	}
    81  
    82  	// regarding key-spaces: I kinda figured we don't
    83  	// really need them because of the following...
    84  	usersKeyspace := filepath.Join("cmd/lsmt/keyspaces", "users")
    85  	conf.BaseDir = usersKeyspace
    86  	// open LSMTree (users keyspace)
    87  	users, err := lsmt.OpenLSMTree(conf)
    88  	if err != nil {
    89  		panic(err)
    90  	}
    91  
    92  	ordersKeyspace := filepath.Join("cmd/lsmt/keyspaces", "orders")
    93  	conf.BaseDir = ordersKeyspace
    94  	// open LSMTree (orders keyspace)
    95  	orders, err := lsmt.OpenLSMTree(conf)
    96  	if err != nil {
    97  		panic(err)
    98  	}
    99  
   100  	// add user 1
   101  	user1 := User{Id: 1, Name: []string{"Scott", "Cagno"}, Age: 34, Active: true}
   102  	data1, err := json.Marshal(user1)
   103  	if err != nil {
   104  		panic(err)
   105  	}
   106  	err = users.Put(strconv.Itoa(1), data1)
   107  	if err != nil {
   108  		panic(err)
   109  	}
   110  
   111  	// add order 1
   112  	err = orders.Put("order-00001", []byte(`THIS IS MY ORDER`))
   113  	if err != nil {
   114  		panic(err)
   115  	}
   116  
   117  	// get user 1
   118  	val, err = users.Get(strconv.Itoa(1))
   119  	if err != nil {
   120  		panic(err)
   121  	}
   122  	var user User
   123  	err = json.Unmarshal(val, &user)
   124  	if err != nil {
   125  		panic(err)
   126  	}
   127  	fmt.Printf("got user1: (%T) %+v\n", user, user)
   128  
   129  	// get order 1
   130  	val, err = orders.Get("order-00001")
   131  	if err != nil {
   132  		panic(err)
   133  	}
   134  	fmt.Printf("got order: %q, %s\n", "order-00001", val)
   135  
   136  	// close (users) LSMTree keyspace
   137  	err = users.Close()
   138  	if err != nil {
   139  		panic(err)
   140  	}
   141  
   142  	// close (orders) LSMTree keyspace
   143  	err = orders.Close()
   144  	if err != nil {
   145  		panic(err)
   146  	}
   147  }
   148  
   149  func myRecoverFunc() {
   150  	if err := recover(); err != nil {
   151  		log.Printf("Recovered from panic: %v", err)
   152  	}
   153  }
   154  
   155  type User struct {
   156  	Id     int
   157  	Name   []string
   158  	Age    int
   159  	Active bool
   160  }