关系型数据库的技术思路

一、网络协议

        需要根据TCP协议设计一个客户端和服务器之间的命令响应协议。

  1、服务端回复声明

  2、客户端发送登录包

  3、服务端返回登录结果

  4、登录成功后进入命令阶段,否则退出。

 

二、每个连接用一个线程

  服务器为每个客户端连接开启一个线程。

 

三、需要文件的随机读写

  需要方便的跳转到存储文件的指针。

 

四、数据结构用B+树

 1、非叶子节点存放很多个关键字

每个关键字递增排列。

  2、叶子节点存放关键字对应记录的文件存放指针。

 

五、每次读取一页到内存里

  1、查询时从文件里读取一页记录。

  2、把这一页记录用结构体格式放在内存中。

 

六、更新数据时需要B+树的查询

  1、非叶子节点中关键字的数组可以用折半查询。

 

七、每次删除节点、插入节点、更新节点要加排他锁

  1、删除、插入和新增时需要获取同一个排他锁。

  2、目的是在多个线程同时操作时保持数据前后一致。

 

排他锁是相对同一个存储文件的。

 

八、对应关系

 1、表的结构也需要用文件来描述

 2、数据库可以是对应一个文件夹。

 3、每个数据表对应一个文件。

 4、一个数据库下的所有表放在和数据库同名的文件夹里面。

 

九、需要设计B+树如何存在文件里

  每部分可以是固定的,也可以是前缀长度描述。

  需要设计一行中所有字段如何存放在文件里。

 

十、如何修改表结构

 1、表结构存在文件里。

  2、表结构被修改,记录文件也要修改。

  如果超出一行空间,需要移动记录,扩容文件。

 

如果移动一百万条记录,花费的时间太久,容易出错。

 

 

你可能感兴趣的:(数据库)