一、设计目的
关系型网络数据库。
二、设计要求:
(一)安装快速
安装程序特别简单。
(二)配置简单
最小化配置。
(三)使用简单,高效
程序占用空间小,支持基本的SQL语法。
(四)稳定可靠
尽量不依赖其他不稳定库。
(五)其他要求
属于关系型数据库。
支持多个网络连接。
支持安全管理。
三、底层设计
1、支持什么操作系统平台:
Win10、Linux
2、编程语言:
最好的是C语言。
其次Java语言。
3、支持的网络连接方式:
TCP连接。
4、数据库服务器目录:
bin 存放二进制程序文件
conf 存放配置文件
lib 存放依赖库
data 存放数据文件
doc 存放使用介绍文件。
5、准备的知识点:
网络TCP编程、文件输入输出流、并发编程、图形化编程、数据结构、算法优化和测试。
四、支持什么功能
(一)网络连接控制
(二)数据的关系型管理
支持数据库和数据表。
(三)支持安全事务
五、性能设计问题
1、如何达到快速存储大量数据的要求?
算法要设计合理。
2、一个数据库实例支持多少个库?
3、数据库支持多少个表?
4、数据表支持多少个字段?
5、一个表最大的数据存储量多少?
6、每秒支持多少个并发连接处理?
六、功能设计
(一)记录的存储结构
1、采用什么数据结构满足快速查询?
要求:查询快速,有索引,有模糊查询。
逻辑结构:B+树
物理结构:数组,链表。
2、数据库文件具体什么格式?什么文件扩展名?
3、表的字段怎么设计?怎么存储到文件里?
(二)磁盘文件的存储顺序
怎么设计才能让数据方便从外存中读取到内存中,又方便存储到外存中?
采用库–>表–>段–>页–>行记录
每个部分的占用字节数很重要。
(三)增删查改操作设计
在内存中完成,刷新和持久化需要写入到磁盘中,注意防止从开头覆盖文件,使用追加模式。
难点:
读写数据是在内存中完成,还是在磁盘文件中完成?
如果是磁盘文件读写,需要跳跃磁盘文件的字节数,定位磁盘文件的字节数。
(四)什么读写架构:
多路复用+一个请求一个线程任务+线程池
(五)如何实现事务?
分两种数据库,一种支持,一种不支持。
(六)如何支持分库分表,数据库集群?
(七)如何设计基于TCP的数据库控制协议?
网络端口是哪个?
七、其他设计问题
(一)思考怎么跨平台运行和部署?
(二)思考怎么稳定运行?
(三)思考怎么最简单的安装(图形化安装、命令行安装)
(四)怎么设置开机自启动?
怎么设置后台运行?
(五)怎么设置环境变量?
(六)未来是否支持UDP连接?
(七)读写如何加锁?
锁住表的某行记录?
查询不加锁,只有插入和更新的时候才加锁。
(八)采用什么安全策略?
IP地址保护,密码保护,账号权限保护。
(九)如何修改密码?
(十)如何恢复初始化?
(十一)如何备份还原?
(十二)数据如何迁移到另一个库中?
(十三)有没有非关系型noSQL功能支持?
(十四)如何实现视图、函数、触发器、事件?
八、数据库最大的特点是什么
安装简单,大小简单。
功能最基本。
性能强大。
操作数据库的语言最简单。
支持SQL语言的通用规范。
满足最简单的,最频繁使用的功能。
程序文件简单高效,合理,少量。
九、连接和管理服务器的客户端:
支持两种管理方式:
命令行、图形化界面(客户端,网页版)
十、数据库服务器执行流程
1、客户端和服务端建立网络连接。
2、服务端开启线程处理这个连接。
3、客户端发送SQL命令。
4、服务端线程从网络套接字读取出命令。
5、服务器线程分析SQL命令。
6、服务器调用对应的方法。
7、服务器获得执行结果。
8、服务器向套接字返回执行结果给客户端。