Skip to content

Instantly share code, notes, and snippets.

@chux0519
Last active September 6, 2021 08:15
Show Gist options
  • Save chux0519/cdf67aded20e4382730c54268f40a69f to your computer and use it in GitHub Desktop.
Save chux0519/cdf67aded20e4382730c54268f40a69f to your computer and use it in GitHub Desktop.
badger-restore
package main
import (
"fmt"
"log"
"os"
badger "github.com/dgraph-io/badger/v3"
badgerOptions "github.com/dgraph-io/badger/v3/options"
)
func main() {
db, err := badger.Open(badger.DefaultOptions("test_db").WithValueLogFileSize(16 << 20).WithMemTableSize(8 << 20).WithValueLogMaxEntries(50000).WithBlockCacheSize(32 << 20).WithCompression(badgerOptions.Snappy))
if err != nil {
log.Fatalf("Failed to Open: %s\n", err.Error())
}
defer db.Close()
pid := os.Getpid()
fmt.Println(pid)
i := 0
for {
err = db.Update(func(txn *badger.Txn) error {
key := fmt.Sprintf("key_%d", i)
value := fmt.Sprintf("value_%d", i)
e := badger.NewEntry([]byte(key), []byte(value))
err = txn.SetEntry(e)
return err
})
if err != nil {
log.Fatalf("Failed to Set: %s\n", err.Error())
}
i += 1
// time.Sleep(10 * time.Millisecond)
}
}
package main
import (
"fmt"
"log"
"os"
"os/signal"
"syscall"
badger "github.com/dgraph-io/badger/v3"
badgerOptions "github.com/dgraph-io/badger/v3/options"
)
func main() {
interrupt := make(chan os.Signal, 1)
signal.Notify(interrupt, os.Interrupt, syscall.SIGTERM)
db, err := badger.Open(badger.DefaultOptions("test_db").WithValueLogFileSize(16 << 20).WithMemTableSize(8 << 20).WithValueLogMaxEntries(50000).WithBlockCacheSize(32 << 20).WithCompression(badgerOptions.Snappy))
if err != nil {
log.Fatalf("Failed to Open: %s\n", err.Error())
}
defer db.Close()
pid := os.Getpid()
fmt.Println(pid)
i := 0
go func() {
for {
err = db.Update(func(txn *badger.Txn) error {
key := fmt.Sprintf("key_%d", i)
value := fmt.Sprintf("value_%d", i)
e := badger.NewEntry([]byte(key), []byte(value))
err = txn.SetEntry(e)
return err
})
if err != nil {
log.Fatalf("Failed to Set: %s\n", err.Error())
}
i += 1
}
}()
killSignal := <-interrupt
switch killSignal {
case os.Interrupt:
log.Print("Received OS Interrupt")
db.Close()
case syscall.SIGTERM:
log.Print("Received Termination Signal")
db.Close()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment