Golang轻量级数据库工具 - Bobb:小巧、简单、快速的DB工具

Golang轻量级数据库工具 - Bobb:小巧、简单、快速的DB工具

Bobb - 小巧、简单、快速的数据库工具

基于 bbolt(bolt db 的分支)构建。目标是找到简单性和功能性之间的最佳平衡点。

测试结果看起来不错,但我还没有在任何项目中使用过它。

GitHub 上的代码

我们(开发者)使用的大多数数据工具都是庞然大物。Bobb 是一种你可以完全理解(除了 bolt 部分)并使用其所有功能的工具。如果你尝试使用它并有任何意见,我将非常感谢你的反馈。

1 回复

更多关于Golang轻量级数据库工具 - Bobb:小巧、简单、快速的DB工具的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Bobb确实是一个值得关注的轻量级数据库工具。它基于bbolt构建,在简单性和功能性之间取得了很好的平衡。以下是一个基本的使用示例:

package main

import (
    "fmt"
    "github.com/jayposs/bobb"
)

func main() {
    // 打开数据库
    db, err := bobb.Open("test.db")
    if err != nil {
        panic(err)
    }
    defer db.Close()

    // 写入数据
    err = db.Put("bucket1", []byte("key1"), []byte("value1"))
    if err != nil {
        panic(err)
    }

    // 读取数据
    value, err := db.Get("bucket1", []byte("key1"))
    if err != nil {
        panic(err)
    }
    fmt.Printf("Value: %s\n", value)

    // 遍历bucket中的所有键值对
    err = db.ForEach("bucket1", func(k, v []byte) error {
        fmt.Printf("Key: %s, Value: %s\n", k, v)
        return nil
    })
    if err != nil {
        panic(err)
    }
}

Bobb的API设计简洁明了,主要操作都封装在几个核心方法中。对于需要事务的操作:

// 使用事务进行批量操作
err = db.Update(func(tx *bobb.Tx) error {
    // 在事务中创建bucket
    bucket, err := tx.CreateBucketIfNotExists([]byte("users"))
    if err != nil {
        return err
    }

    // 批量写入数据
    users := map[string]string{
        "user1": "Alice",
        "user2": "Bob",
        "user3": "Charlie",
    }
    
    for key, value := range users {
        err = bucket.Put([]byte(key), []byte(value))
        if err != nil {
            return err
        }
    }
    return nil
})

查询操作的示例:

// 范围查询
err = db.Range("bucket1", []byte("key1"), []byte("key5"), 
    func(k, v []byte) error {
        fmt.Printf("Range - Key: %s, Value: %s\n", k, v)
        return nil
    })

// 前缀查询
err = db.Prefix("bucket1", []byte("user_"), 
    func(k, v []byte) error {
        fmt.Printf("Prefix - Key: %s, Value: %s\n", k, v)
        return nil
    })

Bobb的轻量级特性使其特别适合嵌入式系统、配置存储和小型应用。基于bbolt的架构保证了ACID兼容性,同时保持了出色的读写性能。代码库简洁(约500行),易于理解和定制,这是相比大型ORM工具的一个显著优势。

回到顶部