美文网首页
[DM]简单总结

[DM]简单总结

作者: 帅可儿妞 | 来源:发表于2020-07-07 21:13 被阅读0次

Data Structure Visualizations

MySQL索引数据结构

  1. 二叉树

    • 在大部分场景下能大大提高查询效率
    • 再不分场景下效率急剧下降, 如, 数字按照大小顺序插入就会退化成一个链表
    • 改造思路: 不要让链表的情况出现: 红黑树
  2. 红黑树

    • 是一种会自动平衡的二叉树
    • 数据量大的情况下效率会比较低, 而且插入数据的时候会不断平衡这棵树
    • 改造思路: 大数据量的情况下, 采用 红黑树 + 链表, 即 B树
  3. B树

    • 叶子节点具有相同的深度, 叶子节点的指针为空
    • 所有索引元素不重复
    • 节点中的数据索引从左到右递增排列
    • 对范围查找支持不是很好
  4. B+树(多叉平衡树)

    • B树的变种
    • 非叶子节点不存储data, 只存储索引(冗余), 那就可以放更多的索引
    • 叶子节点包含所有所有索引字段
    • 叶子节点用指针连接, 提高取件访问的性能, 便于范围查找
    • 一个节点16k的大小, 可以存放1170个索引, 当高度为3就可以存储2kw的数据
    • MySQL采用的就是这种数据结构
  5. 联合索引数据结构

MySQL数据文件

  1. 位置: <mysql-home>/data/<table-name>/<*.frm | *.MYD | *.MYI | *.ibd>
  2. 各个文件的作用
    • MyISAM存储引擎:
      • *.frm: frame, 数据表的构成框架
      • *.MYD: MyISAM Data
      • *.MYI: MyISAM Idex
      • 叶子节点的数据部分存储数据记录的地址
    • InnoDB
      • *.frm: frame, 数据表的构成框架
      • *.ibd: 索引和数据在同一个文件中
  3. 聚集索引
    • InnoDB索引的实现
    • 叶子节点包含了完整的数据记录
    • 表数据文件本身就是按照B+树组织的一个索引结构文件
    • 问题
      • 为什么InnoDB表必须有主键, 而且推荐整形自增主键?
        • B+树结构决定
        • B+T与BT的另外一个区别在于B+T的每一个叶子节点都有前一个节点指针和后一个节点的指针, 即构成双向链表, (因为MySQL的数据结构中海油一种是HASH, HASH在等值条件查询的时候比B+T快得多, 但是范围查询就慢的一批), 即自增主键可以很好的构建一个双向链表, 便于范围查询
      • 为什么非主键索引结构叶子节点存储的是主键值?

JVM

JVM构成 堆和栈的关系 image.png image.png image.png image.png 调整参数避免频繁FullGC 多核并发缓存架构 JMM内存模型
Java线程内存模型和CPU缓存模型类似,是基于CPU缓存模型建立起来的, Java线程内存模型是标准化的, 屏蔽了底层不同计算机的区别 JMM数据原子操作 JMM原子操作流程图

volatile原理: MESI缓存一致性协议: 多个CPU从主内存读取同一个数据到各自的高速缓存, 当某个CPU修改了缓存里的数据, 该数据会马上同步到主内存, 其他读取了该变量的CPU通过总线嗅探机制可以感知到数据的变化, 从而使自己缓存中的该变量副本失效

image.png image.png

多线程

线程排查死锁

jps
jstack <process-id>  
线程状态

相关文章

网友评论

      本文标题:[DM]简单总结

      本文链接:https://www.haomeiwen.com/subject/ybeaqktx.html