Redis的使用场景
标题索引的原理和作用。
当数据库建表没有添加索引时,和直接从磁盘读取数据的效率是一样慢的。
索引和建表一样的存储在4k的datapage存储模型中,无非就是,表存储的是一列一列的数据,而索引是将一行的某一列的数据存储到4k的存储模型中,就比如身份证的数据,就根据身份证的这一条数据对应的是某一行的datapage,有这样的一个指向关系。
而不管是索引还是存表的数据都是存储在磁盘中的,这时候就需要一个存储在内存中的B+树,B+树只有树干是存储在内存中的,当一条sql命中索引了,就先会找到B+树的树干,树干去寻找树叶,就是磁盘中的身份证对应某个4kdatapage,解析读到内存中,根据对应的身份证再去datapage去找对应的某行的数据,将这行数据读取到内存中。
为什么不将树叶也存到内存中而不是磁盘中,因为索引够大的情况下,内存是不够的,各自使用自己的能力,磁盘够大,内存够快,内存只存储树干,这样以减少磁盘大量的IO.
标题表里的数据量很多,会导致性能的下降?
分情况:
表添加了索引:
做增删改时,速度会变慢。因为要维护索引,所以速度会变慢
查询呢?
1.1个或者少量查询依然很快
2.并发大的时候会受磁盘带宽的影响
标题Redis来了(内存的数据库)
在数据量很大,而且并发大的条件下,增删改查的效率一定会低。
怎么解决呢?
有一家公司:SAP HANA内存级别的关系型数据库
数据在磁盘和内存的体积是不一样的,因为磁盘没有指针,磁盘不能像堆中的对象一样,一个对象可以由不能的线程调用,可能你将一个2T的存在磁盘中的数据迁移到内存中只有1T多一点,而且还可以对数据进行压缩,但SAP HANA价格昂贵。
这时Redis出现了,将一部分的数据放到缓存中