Go语言开发的基于DRH(Deep-Re-Hash)深度哈希分区算法的高性能高可用Key-Value嵌入式事务数据库。
特点基于纯Go语言实现,具有优异的跨平台性;数据库文件采用DRH算法设计,提升对随机数据的操作性能;数据库单文件设计,对机械硬盘操作更友好,且易于管理维护;良好的文件IO复用设计,提升对底层数据库文件的操作性能;提供的基本操作接口:Set()、Get()、Remove();提供的事务操作接口:Begin()、Commit()、Rollback();提供的多表操作接口:Table()、SetTo()、GetFrom()、RemoveFrom();支持原子操作、批量操作、事务操作、多表操作、多表事务、随机遍历等特性;限制(默认)表名最长255B;(默认)键名最长255B;(默认)键值最长16MB;(默认)单表数据1TB;支持随机遍历,不支持范围遍历;嵌入式数据库,没有内置C/S架构;安装goget-ugitee.com/johng/gfgoget-ugitee.com/johng/gkvdb使用1、基本用法import"gitee.com/johng/gkvdb/gkvdb"//创建数据库,指定数据库存放目录//gkvdb支持多表,默认数据表名称为defaultdb,err:=gkvdb.New("/tmp/gkvdb")iferr!=nil{fmt.Println(err)}key:=[]byte("name")value:=[]byte("john")//插入数据iferr:=db.Set(key,value);err!=nil{fmt.Println(err)}//查询数据fmt.Println(db.Get(key))//删除数据iferr:=db.Remove(key);err!=nil{fmt.Println(err)}//关闭数据库链接,让GC自动回收数据库相关资源db.Close()2、事务操作//开启事务tx:=db.Begin()//事务写入tx.Set(key,value)//事务查询fmt.Println(tx.Get(key))//事务提交tx.Commit()//事务删除tx.Remove(key)//事务回滚tx.Rollback()3、批量操作//批量操作需要使用事务来实现tx:=db.Begin()//批量写入fori:=0;i4、多表操作//创建user表name:="user"tu,err:=db.Table(name)iferr!=nil{fmt.Println(err)}//user表写入数据tu.Set([]byte("user_0"),[]byte("name_0"))//user表查询数据fmt.Println(tu.Get([]byte("user_0")))//user表删除数据tu.Remove([]byte("user_0"))//通过db对象操作user表写入数据db.SetTo([]byte("user_1"),[]byte("name_1"),name)//通过db对象操作user表查询数据fmt.Println(db.GetFrom([]byte("user_1"),name))//通过db对象操作user表删除数据db.RemoveFrom([]byte("user_1"),name)//手动关闭表,释放表资源//一般不用手动关闭,在数据库关闭时会自动关闭所有的表tu.Close()5、多表事务//两张表name1:="user1"name2:="user2"//创建事务对象tx:=db.Begin()//事务操作user表写入数据tx.SetTo([]byte("user_1"),[]byte("name_1"),name1)tx.SetTo([]byte("user_2"),[]byte("name_2"),name2)//事务操作user表查询数据fmt.Println("txget1:",tx.GetFrom([]byte("user_1"),name1))fmt.Println("txget2:",tx.GetFrom([]byte("user_2"),name2))tx.Commit()fmt.Println("dbget1:",db.GetFrom([]byte("user_1"),name1))fmt.Println("dbget2:",db.GetFrom([]byte("user_2"),name2))//事务操作user表删除数据tx.RemoveFrom([]byte("user_1"),name1)tx.RemoveFrom([]byte("user_2"),name2)fmt.Println("txremoved1:",tx.GetFrom([]byte("user_1"),name1))fmt.Println("txremoved2:",tx.GetFrom([]byte("user_2"),name2))//删除操作将被回滚tx.Rollback()//重新查询fmt.Println("txget1:",tx.GetFrom([]byte("user_1"),name1))fmt.Println("txget2:",tx.GetFrom([]byte("user_2"),name2))fmt.Println("dbget1:",db.GetFrom([]byte("user_1"),name1))fmt.Println("dbget2:",db.GetFrom([]byte("user_2"),name2))6、随机遍历//======默认default表的遍历=====//随机获取10条数据fmt.Println(db.Items(10))//获取所有的键值对数据fmt.Println(db.Items(-1))//获取所有的键键名fmt.Println(db.Keys(-1))//获取所有的键键值fmt.Println(db.Values(-1))//======指定表的遍历=====//两张表name1:="user1"name2:="user2"tu1,err:=db.Table(name1)iferr!=nil{fmt.Println(err)}tu2,err:=db.Table(name2)iferr!=nil{fmt.Println(err)}fori:=0;i
评论