模块划分能力
relational database management system
底层需要一个存储模块(文件系统)
我们还需要组织并使用这些数据,因此需要有程序实例。用逻辑结构来映射出物理结构来,并且在程序中提供获取以及管理数据的方式,以及必要的问题追踪机制。
接下来来细分一下程序的模块。
首先,需要对数据的格式以及文件的风格进行统一的管理,即把物理数据通过逻辑的形式给组织并表示出来。于是便涉及到了程序的存储管理模块。
1. 存储管理模块
我们应该如何优化存储效能?处理数据不能在磁盘上做,肯定是让程序加载到程序空间所在的内存中去做,磁盘IO速率往往是程序执行速度的主要瓶颈。
因为你一次查询一行与一次查询多行,对磁盘IO的使用差不多,所以数据库并不是使用行 作为其存储单位,而是使用块 或者 页 作为其逻辑存储单位。每个块或者页存储多行数据,这样在读取数据的时候,就可以把多个块一起加载到内存中
2. 缓存机制
为了更快、更好的优化我们的程序,要引入缓存机制。下次直接从内存中返回,而不用发生I/O操作。
3. sql解析模块
还需要能提供给外部指令,来操作我们的数据库,即可读的sql语言,那么我们需要一个sql解析模块,来将我们的sql编译、解析,转变为机器可识别的指令。这个时候如果想提高我们sql执行的效率,怎么办?还是将sql缓存到我们的缓存中,把sql编译好,方便下次过来直接进行解析。
可以看到,我们在设计程序的时候,要先考虑功能,然后再进行性能优化。
要注意:我们的缓存不宜过大,而且算法里面要有淘汰机制。
4. 日志管理
做的sql操作,需要记录下来,方便我们做数据库的主从同步,或者灾难恢复。因此需要日志管理办法,如binlog
5. 权限划分
对操作进行权限划分
6. 容灾机制
设计系统的时候除了考虑正常的情况,也要考虑异常的情况,那就是容灾机制
对性能提升,最重要的两个模块
7. 索引管理
优化数据查询效率
8. 锁管理
数据库支持并发操作