宏观
数据库的实现原理分为四个部分:
网络通信
网络协议
硬盘存储
内存分配
微观
硬盘存储
数据库是持久化的,而持久化如何实现的,我们不难想到磁盘可以持久化存储,所以数据库所有持久化的数据都是以文件形式存在磁盘中的,包括索引文件,所以我认为万物皆文件。这里我们需要注意的操作系统的基础知识是,只要存在磁盘中的数据都是以文件形式存储的。包括虚拟内存,试将不用的进程挂起,然后将进程数据信息使用文件的形式存储在磁盘中的一个特定区域中。
网络通信
在数据库中有一个关键的东西,那就是socket。数据库是通过它来与端口所交互的。
那socket又是如何与端口进行交互的呢?
我们第一印象会想到:只要端口来了数据就发送给socket吧。这样看似可以,但是如果真这样做的话,我们还要更麻烦的去识别端口来消息然后让socket被动去接收,我们不如直接让socket主动去接收,过一段时间socket就去询问一下端口是否来数据,从而获得新数据。
网络协议
如今的网络通信,如果是建立连接的话,普遍使用TCP协议,这样可以保证信息的可靠传输。通过三次握手建立连接,四次挥手释放连接。
一个socket只能对应一个连接,所以许多个客户端连接会产生许多个socket。
每次建立一个新连接时,都会对账号和密码进行比对,比对完之后就会生成一个身份标记,同时存放在端口和socket中,之后每一次连接只需要比对身份标记就可以,这样会大大提高性能,不需要每次都去进行用户名和密码的比对。同时保证了性能和安全性。
注意:两者通信建立连接之后一定要记得断开连接。
内存分配
socket拿到数据后后进行字符集编码 --》校验身份 --》解析sql语句。
解析时会将表拷贝进内存,文件中存入的是各个列的数组信息,并且一列一列的查询,需要的返回,不是就继续下一列。(不建立索引的情况)
为了加快速度就可以建立索引,一个表可以建很多索引文件。
先通过索引文件查找到地址,然后再去表文件中根据地址查找。