Skip to content

SeaRise/mrdb

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 

Repository files navigation

mrdb是一个多线程nosql数据库,这个只是用来练手完成的,实现了读可提交和可重复读两种隔离度,实现了并发的b+树,即blink树. 一共六个模块:

  • tbm表管理
  • vm多版本控制
  • tm事务管理
  • im索引管理
  • dm底层数据存储管理,因为这个数据库只是练手用的,所以dm的数据容量只有256KB.
  • util提供序列化的方法和byte[]复用

模块依赖关系:

|-----|     |-----|
| tbm |-----| im  |
|-----|     |-----|
   |	       |
   |           |
   |           |
|-----|     |-----|
| vm  |-----| dm  |
|-----|     |-----|
   |           |
   |           |
   |           |
|-----|        |
| tm  |--------|
|-----|
  • dm:提供了dm数据管理,用分页管理实现了数据缓存,读写用byte[].每个对dm的写操作都记录在日志, 每次启动dm都会重放日志里的操作.dm可以保证操作的原子性和持久性
  • vm:实现了mvcc,为每个数据项提供了xmin和xmax,用来进行多版本控制.提供可重复读和读已提交两种隔离度.
  • tm:进行事务管理,因为用了mvcc所以dm不提供delete操作,发生回滚时只需更新tm中相应事务的状态, 在vm模块进行可见性判断时就会对相应的事务返回false,相当于撤回了.所以每次启动dm重放日志的时候会检测是否需要回滚, 回滚只需用tm更新事务的状态即可.
  • im:提供了并发的b+树,节点存储在dm,借助dm本身的原子性保证节点自身结构不会被破坏, 根据blink树协议保证节点间关系在并发读写下不会被破坏,且不会发生死锁.
  • util:提供序列化的方法和byte[]复用,每次使用byte[]都从util取,用完放回util,避免重复new byte[],频繁触发GC,而且容易产生朝生夕灭的大数组.

测试这一块没怎么做,所以这个nosql可能还有很多bug.....先这样把.

Releases

No releases published

Packages

No packages published

Languages