https://github.com/xingyu-long/gobitcask
Go version Bitcask
https://github.com/xingyu-long/gobitcask
bitcask golang kv-store
Last synced: 6 months ago
JSON representation
Go version Bitcask
- Host: GitHub
- URL: https://github.com/xingyu-long/gobitcask
- Owner: xingyu-long
- Created: 2024-09-06T20:22:46.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-09-07T20:54:53.000Z (almost 2 years ago)
- Last Synced: 2024-09-08T21:55:53.959Z (almost 2 years ago)
- Topics: bitcask, golang, kv-store
- Language: Go
- Homepage:
- Size: 11.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# gobitcask
This is an implementation of [Bitcask](https://riak.com/assets/bitcask-intro.pdf) (key/value database) in Golang based on [mini-bitcask](https://github.com/rosedblabs/mini-bitcask/tree/main)
## Usage
```go
package main
import (
"bytes"
"fmt"
"github.com/xingyu-long/gobitcask"
)
func main() {
db, err := gobitcask.Open("/tmp/gobitcask_main")
if err != nil {
panic(err)
}
key := []byte("test_key")
value := []byte("test_value")
err = db.Put(key, value)
if err != nil {
panic(err)
}
fmt.Printf("1. Run %s: %s\n", "Put", fmt.Sprintf("put key = %s, value = %s into kv", string(key), string(value)))
ret_val, err := db.Get(key)
if err != nil {
panic(err)
}
if bytes.Equal(ret_val, value) {
fmt.Printf("2. Run %s: %s\n", "Get", fmt.Sprintf("value = %s", string(ret_val)))
} else {
panic(fmt.Sprintf("Expected value = %s, Actual value = %s\n", string(value), string(ret_val)))
}
err = db.Delete(key)
if err != nil {
panic(err)
}
fmt.Printf("3. Run %s: %s\n", "Delete", fmt.Sprintf("key = %s", string(key)))
db.Merge()
fmt.Printf("4. Run %s: %s\n", "Merge", "merge data and create new DBFile")
db.Close()
fmt.Printf("5. Run %s: %s\n", "Close", "close DB")
}
```