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 }