数据库开发设计学习
本文于 1753 天之前发表,文中内容可能已经过时。
系统外知识
1: 操作系统里的Page(页)是固定大小的内存,一般为4k,可以通过命令查找。
数据库主要涉及的知识点
1:事务,隔离级别
2:MVCC
3:多版本存储,每一个版本都是一个B-tree树
4:B-tree
C-ISAM
D-ISAM
事务
需要解决的问题
1 | 原子性:是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。 |
从某种意义上来说,原子性和一致性 是事务主要需要解决的问题,隔离性是因为一致性的需要而引入的,持久性对于非内存数据库是比较重要的概念。
解决的方案
日志的REDO/UNDO机制
在mysql中,redo日志主要记录数据库中每个页的修改有innodb记录,和binlog是有区别的,binlog是数据库引擎上层的行为。整个详细的方案可以参考下
https://www.cnblogs.com/f-ck-need-u/p/9010872.html
参考的资料
1 | https://zhuanlan.zhihu.com/p/35574452 |
数据存储
如果刷盘,
关系型数据库数据的映射。
延伸思考
1:在数据多写少读的情况下,ps:矿机监控
数据库的索引建的越多,更新数据越麻烦,而且排序索引也不会很准。另外一个比如温度之类的,第一页的数据和第二页的数据可能就不一样了。所以最好的方案确实是存的时候一个kv数据,读取的时候,频繁更新的数据如果需要做查询,排序,不适合走索引,适合做镜像。
暂时只写这么多,等看完h2源码再回过来补充资料。