logo头像
Snippet 博客主题

数据库开发设计学习

本文于 1094 天之前发表,文中内容可能已经过时。

系统外知识

1: 操作系统里的Page(页)是固定大小的内存,一般为4k,可以通过命令查找。

数据库主要涉及的知识点

1:事务,隔离级别
2:MVCC
3:多版本存储,每一个版本都是一个B-tree树
4:B-tree
C-ISAM
D-ISAM

事务

需要解决的问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
   原子性:是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。

一致性:是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。

隔离性:是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。

持久性:是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
```
从某种意义上来说,原子性和一致性 是事务主要需要解决的问题,隔离性是因为一致性的需要而引入的,持久性对于非内存数据库是比较重要的概念。
#### 解决的方案
日志的REDO/UNDO机制

在mysql中,redo日志主要记录数据库中每个页的修改有innodb记录,和binlog是有区别的,binlog是数据库引擎上层的行为。整个详细的方案可以参考下
https://www.cnblogs.com/f-ck-need-u/p/9010872.html

##### 参考的资料

https://zhuanlan.zhihu.com/p/35574452
https://www.cnblogs.com/f-ck-need-u/p/9010872.html
https://www.cnblogs.com/f-ck-need-u/p/9010872.html
https://www.reddit.com/r/Database/comments/27u6dy/how_do_you_build_a_database/ciggal8/
http://www.voidcn.com/article/p-huiriupm-sm.html
https://blog.csdn.net/kaixin89/article/details/50738486

```

数据存储

如果刷盘,
关系型数据库数据的映射。

延伸思考

1:在数据多写少读的情况下,ps:矿机监控
数据库的索引建的越多,更新数据越麻烦,而且排序索引也不会很准。另外一个比如温度之类的,第一页的数据和第二页的数据可能就不一样了。所以最好的方案确实是存的时候一个kv数据,读取的时候,频繁更新的数据如果需要做查询,排序,不适合走索引,适合做镜像。

暂时只写这么多,等看完h2源码再回过来补充资料。