Go 语言 KV 存储引擎 LotusDB 2.0 重磅发布!

2023-09-04 10:27:49 +08:00
 huiwang520

经过差不多两个月的重构,在社区小伙伴的共同协作努力下,LotusDB V2.0.0 版本正式发布!

LotusDB 项目地址: https://github.com/lotusdblabs/lotusdb

LotusDB 是用 Go 语言编写的 KV 数据库,它采用 KV 分离的思想,融 LSM Tree 和 B+ Tree 存储模型为一体,适合大规模的 KV 数据存储,相较于 Go 语言领域知名的 KV 存储项目 badger 和 bbolt ,LotusDB 具有更先进的设计架构。

这次我们通过两个月的重构,将 LotusDB 原来 V1 版本的代码基本上重新实现了一遍,目的在于提高简洁度。

LotusDB 的整体架构实现了全新升级,目的在于提升读写和压缩性能,下面是之前 V1 版本的架构图: 这是重构后的 V2 版本的架构图: 相对于 V1 版本,V2 版本主要有以下更新:

毫不夸张的说,这是目前 Go 语言领域架构最先进的 KV 存储引擎项目,其优势主要体现在:

以下是 LotusDB 的简单使用示例,大家可以上手体验!

package main

import "github.com/lotusdblabs/lotusdb/v2"

func main() {
    // 指定设置
    options := lotusdb.DefaultOptions
    options.DirPath = "/tmp/lotusdb_basic"

    // 打开数据库
    db, err := lotusdb.Open(options)
    if err != nil {
        panic(err)
    }
    defer func() {
        _ = db.Close()
    }()

    // 写入键值对
    key := []byte("KV store engine")
    value := []byte("LotusDB")
    putOptions := &lotusdb.WriteOptions{
        Sync:       true,
        DisableWal: false,
    }
    err = db.Put(key, value, putOptions)
    if err != nil {
        panic(err)
    }

    // 读取键值对
    value, err = db.Get(key)
    if err != nil {
        panic(err)
    }
    println(string(value))

    // 删除键值对
    err = db.Delete(key, putOptions)
    if err != nil {
        panic(err)
    }

    // 启动 Value Log 压缩
    err = db.Compact()
    if err != nil {
        panic(err)
    }
}

致谢

在 LotusDB 的重构过程中,非常感谢社区的各位小伙伴的参与和积极贡献,特别是 @燕小七 和 @akiozihao 表现最为积极活跃,为 LotusDB 2.0 的重构做了很多工作,再次表示感谢,也希望能够继续参与。

同时 @燕小七 同学成为了 LotusDB 的第一位 Committer ,后续我们希望能够培养更多的 Committer 和 Maintainer ,充分发挥社区的作用,共同打造和完善 LotusDB 这个最先进的 KV 存储引擎!

同时也非常欢迎大家能够参与进来,目前我们只是发布了第一个版本,后续将会持续迭代,能够让大家发挥的空间巨大,感兴趣的可以加我微信私聊,我会将你拉到开发者群当中。

2316 次点击
所在节点    程序员
8 条回复
anoyi
2023-09-04 10:37:36 +08:00
NBNB
dacapoday
2023-09-04 11:50:58 +08:00
方便的话,能在 README.md 里提供 pkg.go.dev 的文档链接吗
chinalichen
2023-09-04 14:28:50 +08:00
有没有跟 bbolt 的性能对比呀
ck65
2023-09-04 14:40:41 +08:00
请问单个 DB 目录支持被多个 goroutine 同时打开(及读写)吗?
wangpugod2003
2023-09-04 14:54:59 +08:00
支持分布式的存储吗?
Leexiaobu
2023-09-04 16:11:07 +08:00
这和 leveldb 很像啊
huiwang520
2023-09-04 17:25:03 +08:00
@ck65 只能在一个进程里打开,打开后可以多个 goroutine 并发读写,加了锁保证的
huiwang520
2023-09-04 17:26:51 +08:00
@dacapoday 可以的,后续我们会提供专门的文档
@chinalichen 后续会加上,我们自己测过,比 boltdb 的写性能强出 n 个档次
@wangpugod2003 暂时不支持,这是单机 KV
@Leexiaobu 比 leveldb 强大很多

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/970685

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX