golsm

package module
v0.2.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 8, 2026 License: BSD-3-Clause Imports: 2 Imported by: 0

README

golsm

Go Reference

A Go implementation of an LSM-tree based key-value store with LevelDB-compatible on-disk formats.

Features

  • Put / Get / Delete
  • Range scan via bidirectional iterators
  • Atomic batch writes
  • Snapshots
  • Background compaction
  • Snappy block compression
  • Block cache
  • LevelDB-compatible on-disk format (WAL, MANIFEST, SSTable)
  • Bloom filter

Usage

go get github.com/ls4154/golsm
package main

import (
    "log"

    "github.com/ls4154/golsm"
    "github.com/ls4154/golsm/db"
)

func main() {
    opt := db.DefaultOptions()

    ldb, err := golsm.Open(opt, "./mydb")
    if err != nil {
        log.Fatal(err)
    }
    defer ldb.Close()

    wo := &db.WriteOptions{}
    ro := &db.ReadOptions{}

    // Write
    if err := ldb.Put([]byte("hello"), []byte("world"), wo); err != nil {
        log.Fatal(err)
    }

    // Read
    val, err := ldb.Get([]byte("hello"), ro)
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("hello = %s", val)

    // Delete
    if err := ldb.Delete([]byte("hello"), wo); err != nil {
        log.Fatal(err)
    }

    // Scan
    iter, err := ldb.NewIterator(ro)
    if err != nil {
        log.Fatal(err)
    }
    defer iter.Close()

    for iter.SeekToFirst(); iter.Valid(); iter.Next() {
        log.Printf("%s = %s", iter.Key(), iter.Value())
    }

    // Snapshot
    snap := ldb.GetSnapshot()
    defer snap.Release()

    snapVal, err := ldb.Get([]byte("key"), &db.ReadOptions{Snapshot: snap})
    _ = snapVal
    _ = err
}

Benchmark

go run ./cmd/dbbench \
    -benchmarks=fillseq,overwrite,readseq,readreverse,readrandom \
    -num=1000000 -threads=4 -value_size=100 -write_buffer_size=4194304 -max_file_size=4194304 \
    -cache_size=67108864 -compression=snappy -bloom_bits=10 \
    -db=./bench-db -histogram=1

License

BSD 3-Clause

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Open

func Open(options *db.Options, path string) (db.DB, error)

Types

This section is empty.

Directories

Path Synopsis
cmd
dbbench command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL