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

252 天前
 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 存储引擎!

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

2028 次点击
所在节点    程序员
8 条回复
anoyi
252 天前
NBNB
dacapoday
252 天前
方便的话,能在 README.md 里提供 pkg.go.dev 的文档链接吗
chinalichen
252 天前
有没有跟 bbolt 的性能对比呀
ck65
252 天前
请问单个 DB 目录支持被多个 goroutine 同时打开(及读写)吗?
wangpugod2003
252 天前
支持分布式的存储吗?
Leexiaobu
252 天前
这和 leveldb 很像啊
huiwang520
251 天前
@ck65 只能在一个进程里打开,打开后可以多个 goroutine 并发读写,加了锁保证的
huiwang520
251 天前
@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