逐梦少年,看你能不能发现宝藏( 五 )


RDB优点
? 节省磁盘空间
? 恢复速度快
RDB缺点
? 虽然Redis在fork时使用了写时拷贝技术,但是如果数据庞大时还是比较消耗性能的 。
? 在备份周期在一定间隔时间做一次备份,所以如果Redis意外down掉的话,就会丢失最后一次快照后的所有修改 。
2.AOF
? 以日志的形式来记录每个写操作,将Redis执行过的所有的指令记录下来(读操作不记录),只许追加文件但不可以改写文件,Redis启动之初会读取该文件重新构建数控,换言之,Redis重启的话就是根据日志文件的内容将写指令从前到后执行一次,已完成数据的恢复工作 。
AOF的优点
? 备份机制更稳健,丢失数据概率更低
? 刻度的日志文本,通过操作AOF文件,可以处理错误操作 。
AOF缺点
? 比起RDB占用更多的磁盘空间 。
? 恢复备份速度更慢 。
? 每次读写都同步的话,有一定的性能压力 。
? 存在个别bug,造成恢复不全 。
15.MySql什么时候适合建索引,什么时候不适合建索引?
? 索引是什么?
? 索引是帮助MySql高效获取数据的数据结构 。可以得到索引的本质:索引是数据结构 。
? 优点:
? 类似于大学图书馆建立目录索引,提高数据检查的效率,降低数据库的 IO 成本 。
? 通过所i你对数据进行排序,降低数据排序的成本,降低了CPU的消耗 。
? 劣势:
? 虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行、、和 。
? 因为更新表时,MySql不仅要保存数据,还要保存一下索引文件每次更新了索引列的字段 。都会调整因为更新所带来的键值变化后的索引信息 。
? 实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也是要占用空间的 。
适合创建索引的情况:
1.主键自动建立唯一索引 主键,msql会默认创建索引的 。
2.频繁作为查询条件的字段应该创建索引
3.查询中与其他表关联的字段,外键关系创建索引 。
4.单肩/组合索引的选择问题,组合索引的性价比更高
5.查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度 。
6.查询中统计或者分组字段 。
哪些情况不需要创建索引?
1.表记录太少
2.经常增删改的表或者字段
3.where条件里面用不到的字段不创建索引
4.过滤性不好的不适合建索引 。例如:性别字段:男女
15.JVM垃圾回收机制,GC发生在JVM哪部分,有几种GC,他们的算法是什么?
GC垃圾回收机制,是发生在堆里面的
GC是什么?(分代收集算法)
? 次数上是频繁收集Young区(就是年轻带)----------Minor GC
? 次数上较少收集Old区(就是老年代) -------------Full GC
? 基本不懂Perm区(永久区-----没有gc)
GC的垃圾回收算法
? 1.引用技术法
? 每次对象赋值时,均要维护引用计数器,且计数器本身也有一定的消耗
? 较难处理循环引用
? JVM的实现一般不采用这种方式
? 2.复制算法()
? 年轻代中使用的是Minor GC ,这种GC算法采用的是复制算法() 。
? 原理:
? 从根集合(GC Root)开始,通过从From中找到存货的对象,拷贝到To中;
? From、To交换身份,下次内存分配从To开始;
? 优点:没有标记和清除的过程,效率高
? 没有内存碎片,可以利用bump-the-实现快速内存分配
? 缺点:需要双倍的空间
? 3.标记清除(Mark-Sweep)
? 老年代一般是由标记清除或者是标记清除与标记整理的混合实现 。