关系型数据库
一 IO基础知识
data page:默认4K,刚好和磁盘上每次的默认读取量4K相同。根据第一天的经验,data page设置时,如果小于4K时,会导致浪费,比如data page设置为1K,实际上对磁盘做数据操作时,磁盘还是给返回4K的数据回来;不过如果data page的设置大于4K,则磁盘每次的读写量大小就是data page设置的大小
磁盘读写量与data page的关系:磁盘每次的读写量 = data page < 4K ? 4K : data page
二 数据库基础知识
2-1 仅仅只是建表
如果数据库仅仅只是建表,但是没有建索引,每次从数据库中读取信息时,实际上IO也是按照顺序去遍历每一个data page所对应的磁盘数据,找到了就给你返回,数据量越大,IO速度也就会越慢
2-2 为表添加索引
如果为表中的某个列建索引,那么索引其实底层上也是保存在data page上的,只是这个data page上除了保存索引列的信息之外,还保存了当前索引所在行的data page磁盘地址,方便我们后续的查询能更快的定位
2-3 关系型数据库建表
关系型数据库建表的时候,必须给出schema(schema:一共多少个列,每个列的类型是啥),定死了每列的数据类型的字节宽度,假设此时数据表中有5个字段,每个字段占一个字节,然后我们新增一条数据,只有2个字段是有值的,当我们向data page中存数据的时候,其他3个没有值的字段会用0作为填充,把当前列字节的宽度给全部占满,这是由于关系型数据库偏向于行级储存,当我们以后对行数据做编辑操作的时候,不需要移动数据,直接对行数据做覆盖操作就可以了。
数据表和索引因为都是文件,都会放在磁盘上,而我们常说的B+树其实是一种算法,用来更快的找到数据的所在区间,减少磁盘寻址的次数,提升查询效率,B+树里是不存储数据的,因此它可以放在内存中,而它的叶子结点保存的是索引所在的data page地址
三、表很大的时候,性能下降?这句话对吗
1、如果表有索引,增删改会变慢,因为需要维护索引
2、查询速度呢?(假数据量巨大,1TB)
- 1个或少量查询依然会很快
- 并发大的时候会受到硬盘带宽影响速度
硬盘的速度除了受寻址影响之外,还会受到硬盘带宽的影响
四、数据库的两个极端
数据库有两个极端:一个是把数据存储在磁盘上的数据库(MYSQL),还有一个是把数据存在内存上的数据库(SAP HANA)。
- 数据存在内存和存在磁盘上时,所占用的空间是不一样的,因为磁盘中的文件不存在引用这个概念,而内存可以利用引用来减少索引带来的额外的空间使用,因此基于内存的数据库往往要比基于磁盘的数据库存储相同数据时,所使用的空间更少,但是内存数据库的价格也是极其高昂的,一般的企业无法承担
- 所以才有了一个折中的处理方案,也就是利用缓存保存部分热点数据,提高访问的效率
五 、K-V数据库
K-V数据库其实就是JSON,一般JSON所表示的数据形式有:
JSON可以表示很复杂的数据结构
世界上有三种数据表示形式:
k=a
k=1
k=[1,2,3]
k=[a,x,f]
k={x=y} k=[{x=y},{a=b}]
\