github地址 https://github.com/MaBo2420935619/mbdb
B站视频讲解地址 https://www.bilibili.com/video/BV1U24y1X77n/?vd_source=98dd5196d8032a123e502968e9da520d
mbdb-使用java开发的关系型数据库
项目github地址 https://github.com/MaBo2420935619/mbdb
mbdb是一个用Java实现的基于文件存储的 关系型数据库管理系统,由个人开发者mabo独立开发
mbdb是一个关系型数据库管理系统,将不同表的数据保存在不同的目录下,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性
每个表的目录下有三个文件:
data.mbdb存储数据
index.mbdb存储索引
tableDefinition.mbdb存储表结构信息
mbdb数据库目前只有表的概念,所有的操作都是基于表进行操作
mbdb支持json格式对表结构进行定义,添加数据之前需要首先定义表结构。
查询数据目前仅支持主键查询
mbdb支持两种查询方式,全表查询和索引查询
索引查询采用二分法读取索引文件,确定索引位置,再根据索引位置进行数据查询,目前测试的性能为一百万条数据查询速度为3.6s
mbdb增加数据采用追加的方式进行数据的新增操作,新增数据支持批量新增和单条新增
数据量较大时建议采用批量新增,因为新增数据时,会重新生成索引文件,对系统性能消耗较大
mbdb删除数据采用逻辑删除,即将该条数据的标志位改为1,则该条数据删除成功
这种方式可以减少其他数据的移动,减少系统性能的损耗
mbdb支持根据主键修改数据,底层逻辑为首先删除改数据,再将需要修改的数据新增至数据文件(data.mbdb文件)
如表头所示,数据用符号 | 分割,delete是数据是否被删除的标志位,其余位分别对应数据的名称
索引文件一条数据存储了三条数据用符号 | 进行分割,key存储数据的唯一id,position存储数据的指针,方便查询数据,表头的999008用于表示数据的数据量大小,因为查询数据采用二分法查询,所以需要记录数据的数据量。
表结构文件存储的是表结构的json字符串
[{“name”:“userName”,“length”:“10”,“remark”:“用户姓名”,“type”:“varchar”,“delete”:“1”,“primary”:“false”},{“name”:“userAge”,“length”:“10”,“remark”:“用户年龄”,“type”:“int”,“delete”:“1”,“primary”:“false”},{“name”:“id”,“length”:“10”,“remark”:“ID”,“type”:“char”,“delete”:“1”,“primary”:“true”}]
该结构可以和数据库一样,存储表的字段信息
目前madb仅支持基于主键查询、修改、删除操作。
查询算法采用二分法,有很大的优化空间。
数据的索引可以使用缓存进行存储。
索引中可以添数据的起始位置和结束位置,查询速度更优。