一、网络协议
需要根据TCP协议设计一个客户端和服务器之间的命令响应协议。
1、服务端回复声明
2、客户端发送登录包
3、服务端返回登录结果
4、登录成功后进入命令阶段,否则退出。
二、每个连接用一个线程
服务器为每个客户端连接开启一个线程。
三、需要文件的随机读写
需要方便的跳转到存储文件的指针。
四、数据结构用B+树
1、非叶子节点存放很多个关键字
每个关键字递增排列。
2、叶子节点存放关键字对应记录的文件存放指针。
五、每次读取一页到内存里
1、查询时从文件里读取一页记录。
2、把这一页记录用结构体格式放在内存中。
六、更新数据时需要B+树的查询
1、非叶子节点中关键字的数组可以用折半查询。
七、每次删除节点、插入节点、更新节点要加排他锁
1、删除、插入和新增时需要获取同一个排他锁。
2、目的是在多个线程同时操作时保持数据前后一致。
排他锁是相对同一个存储文件的。
八、对应关系
1、表的结构也需要用文件来描述
2、数据库可以是对应一个文件夹。
3、每个数据表对应一个文件。
4、一个数据库下的所有表放在和数据库同名的文件夹里面。
九、需要设计B+树如何存在文件里
每部分可以是固定的,也可以是前缀长度描述。
需要设计一行中所有字段如何存放在文件里。
十、如何修改表结构
1、表结构存在文件里。
2、表结构被修改,记录文件也要修改。
如果超出一行空间,需要移动记录,扩容文件。
如果移动一百万条记录,花费的时间太久,容易出错。