Skip to content
DecarbonizedGlucosePublic

About

A LSM-tree based storage engine written in Go, designed for embedding in distributed systems.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

121 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Granite

Granite 是一个使用 Go 编写的单机 LSM-tree 键值存储引擎。

go get github.com/DecarbonizedGlucose/granite

基本使用

package main

import (
	"errors"
	"log"

	"github.com/DecarbonizedGlucose/granite"
)

func main() {
	db, err := granite.Open("./data", nil)
	if err != nil {
		log.Fatal(err)
	}
	defer db.Close()

	if err := db.Put([]byte("key"), []byte("value"), nil); err != nil {
		log.Fatal(err)
	}

	value, err := db.Get([]byte("key"), nil)
	if err != nil && !errors.Is(err, granite.ErrNotFound) {
		log.Fatal(err)
	}
	_ = value

	if err := db.Delete([]byte("key"), nil); err != nil {
		log.Fatal(err)
	}
}

Batch

batch := granite.MakeBatch(0)
batch.Put([]byte("a"), []byte("1"))
batch.Put([]byte("b"), []byte("2"))
batch.Delete([]byte("c"))

err := db.Write(batch, nil)
batch.Reset()

Iterator

keyRange := &granite.Range{
	Start: []byte("a"),
	Limit: []byte("z"),
}

it := db.NewIterator(keyRange, nil)
defer it.Close()

for ok := it.First(); ok; ok = it.Next() {
	key := it.Key()
	value := it.Value()
	_, _ = key, value
}
if err := it.Error(); err != nil {
	return err
}

Iterator 同时提供 First、Last、Seek、Next、Prev、Valid、 Key、Value、Error 和 Close。

Snapshot

snapshot, err := db.NewSnapshot()
if err != nil {
	return err
}
defer snapshot.Close()

value, err := snapshot.Get([]byte("key"), nil)

it := snapshot.NewIterator(nil, nil)
defer it.Close()

Options

db, err := granite.Open("./data", &granite.Options{
	WriteBuffer: 4 << 20,
	NoSync:      false,
})

value, err := db.Get(key, &granite.ReadOptions{
	DontFillCache: true,
})

err = db.Put(key, value, &granite.WriteOptions{
	SyncEachTime: true,
})

公开错误值包括 ErrNotFound、ErrClosed、ErrIterClosed 和 ErrSnapshotClosed。

About

A LSM-tree based storage engine written in Go, designed for embedding in distributed systems.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages