Skip to content

lustresix/lxdb

Repository files navigation

piYRNbF.png

👋LxDB

类似于redis,基于bitcask内核的k-v数据库。支持事务,resp,http接口,提供以Btree,AdaptiveRadixTree,B+tree为基础的索引。

MIT License Static Badge GPLv3 License AGPL License

🏁部署项目

要部署这个项目,请运行

  go get https://github.com/lustresix/lxdb

🚀使用方法/示例

快速使用

package main

import (
    "fmt"
	LustreDB "github.com/lustresix/lxdb"
)

func main() {
  // simple
	options := LustreDB.DefaultOptions
	db, _ := LustreDB.Open(options)

	err = db.Put([]byte("hello"), []byte("world1"))

	get, _ := db.Get([]byte("hello"))
	fmt.Println("val = ", string(get))

	_ = db.Delete([]byte("hello"))

    // Transaction
    batchOptions := LustreDB.DefaultWriteBatchOptions
	wb := open.NewWriteBatch(batchOptions)
	
    _ = wb.Put([]byte("hello1"), []byte("world1"))
	_ = wb.Delete([]byte("hello1"))
	
    err = wb.Commit()
	if err != nil {
		return 
	}
}

redis-cli

启动数据库

.\cmd

打开redis-cli

redis-cli -p 6380

http支持

.\http

端口: 8080

[GIN-debug] POST   /put                      --> main.CommonApi.PutApi-fm (3 handlers)
[GIN-debug] POST   /get                      --> main.CommonApi.GetApi-fm (3 handlers)
[GIN-debug] POST   /delete                   --> main.CommonApi.DelApi-fm (3 handlers)
[GIN-debug] GET    /list                     --> main.CommonApi.ListApi-fm (3 handlers)

API 参考

存入k-v

  POST /put
参数 类型 描述
data map[string]string 必选. key and value

获取value

  GET /get
参数 类型 描述
key []string 必选. 要获取的value的key

删除k-v

  POST /delete
参数 类型 描述
key []string 必选. 要删除的key

获取key的列表

  GET /list

📢技术栈

语言: Golang

内核基础: Bitcask

🔮存储结构

数据文件

piYc336.png

事务逻辑

上传事务,自增seq,完成时为seq+tex-fin如果没有读取到则说明事务失败,不保存到索引中 piYgZGt.png

✅ ToDOlist

  • IO优化(文件锁,分区缓存)。
  • 兼容Redis协议和命令。
  • 支持http服务。
  • 支持tcp服务。
  • 数据备份。
  • 分布式集群。

📝反馈

如果你有任何反馈,请联系我:1911827241@qq.com

About

a k-v database by go with bitcask

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages