首页 > 其他分享 >红黑树-概述

红黑树-概述

时间:2022-10-28 13:04:19浏览次数:53  
标签:MySQL 代理 AVL 关键字 概述 RB 红黑树 节点


hash不支持范围

hash不排序

hash不支持模糊排序

hash碰撞

hash模糊

数据库为什么使用B+树而不是B树

  • B树只适合随机检索,而B+树同时支持随机检索和顺序检索;
  • B+树空间利用率更高,可减少I/O次数,磁盘读写代价更低。一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。这样的话,索引查找过程中就要产生磁盘I/O消耗。B+树的内部结点并没有指向关键字具体信息的指针,只是作为索引使用,其内部结点比B树小,盘块能容纳的结点中关键字数量更多,一次性读入内存中可以查找的关键字也就越多,相对的,IO读写次数也就降低了。而IO读写次数是影响索引检索效率的最大因素;
  • B+树的查询效率更加稳定。B树搜索有可能会在非叶子结点结束,越靠近根节点的记录查找时间越短,只要找到关键字即可确定记录的存在,其性能等价于在关键字全集内做一次二分查找。而在B+树中,顺序检索比较明显,随机检索时,任何关键字的查找都必须走一条从根节点到叶节点的路,所有关键字的查找路径长度相同,导致每一个关键字的查询效率相当。
  • B-树在提高了磁盘IO性能的同时并没有解决元素遍历的效率低下的问题。B+树的叶子节点使用指针顺序连接在一起,只要遍历叶子节点就可以实现整棵树的遍历。而且在数据库中基于范围的查询是非常频繁的,而B树不支持这样的操作。
  • 增删文件(节点)时,效率更高。因为B+树的叶子节点包含所有关键字,并以有序的链表结构存储,这样可很好提高增删效率。

CountDownLatch的计数器只能使用一次。而CyclicBarrier的计数器可以使用reset()
方法重置。所以CyclicBarrier能处理更为复杂的业务场景,比如如果计算发生错误,可以重置计数器,并让线程们重新执行一次。
CyclicBarrier还提供其他有用的方法,比如getNumberWaiting方法可以获得CyclicBarrier阻塞的线程数量。isBroken方法用来知道阻塞的线程是否被中断。比如以下代码执行完之后会返回true。
CountDownLatch会阻塞主线程,CyclicBarrier不会阻塞主线程,只会阻塞子线程。
某线程中断CyclicBarrier会抛出异常,避免了所有线程无限等待。

红黑树

根节点永远是黑色

红色结点的叶子节点都是黑色

所有的叶子结点字节点都是黑色

只有红色或者黑色

从任意一个节点的字数到每个叶子的路径都含有相同的黑色节点

红黑树与AVL树,各自的优缺点总结

  1. 红黑树不追求"完全平衡",即不像AVL那样要求节点的​​|balFact| <= 1​​,它只要求部分达到平衡,但是提出了为节点增加颜色,红黑是用非严格的平衡来换取增删节点时候旋转次数的降低,任何不平衡都会在三次旋转之内解决,而AVL是严格平衡树,因此在增加或者删除节点的时候,根据不同情况,旋转的次数比红黑树要多。
  2. 就插入节点导致树失衡的情况,AVL和RB-Tree都是最多两次树旋转来实现复衡rebalance,旋转的量级是O(1)
    删除节点导致失衡,AVL需要维护从被删除节点到根节点root这条路径上所有节点的平衡,旋转的量级为O(logN),而RB-Tree最多只需要旋转3次实现复衡
    只需O(1),所以说RB-Tree删除节点的rebalance的效率更高,开销更小!
  3. AVL的结构相较于RB-Tree更为平衡,插入和删除引起失衡,如2所述,RB-Tree复衡效率更高;当然,由于AVL高度平衡,因此AVL的Search效率更高啦。
  4. 针对插入和删除节点导致失衡后的rebalance操作,红黑树能够提供一个比较"便宜"的解决方案,降低开销,是对search,insert ,以及delete效率的折衷,总体来说,RB-Tree的统计性能高于AVL.
  5. 故引入RB-Tree是功能、性能、空间开销的折中结果

红黑树-概述_mysql

静态代理和动态代理区别

今天看了下资料。大致清楚静态代理和动态代理的区别
代理模式有两种:1.静态代理 2.动态代理
个人理解最主要的却别:
静态代理:是在java文件编译前,手动写好代理类对象。这样只能代理一类对象,即一类接口的类型。
动态代理:是通过反射原理,在程序运行的时候动态的生成的代理对象,所以可以代理任意的类对象。

红黑树-概述_memcached_02

redo log 是 InnoDB 引擎特有的;binlog 是 MySQL 的 Server 层实现的,所有引擎共用。
redo log 是物理日志,记录的是“在某个数据页上做了什么修改”;binlog 是逻辑日志,记录的是这个语句的原始逻辑,比如“给 ID=1 这一行的 c 字段加 1 ”。
redo log 是循环写的,空间固定会用完然后复写;binlog 是可以追加写入的。“追加写”是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。

对MySQL来说,逻辑备份日志(binlog)、重做日志(redolog)、回滚日志(undolog)、锁技术 + MVCC就是MySQL实现事务的基础。

原子性:通过undolog来实现。
持久性:通过binlog、redolog来实现。
隔离性:通过(读写锁+MVCC)来实现。
一致性:MySQL通过原子性,持久性,隔离性最终实现(或者说定义)数据一致性。

CMS收集器和G1收集器,优缺点对比

前面我们讲了MySQL数据库底层的数据结构与算法、MySQL性能优化篇一些内容。以及上篇讲了MySQL的行锁与事务隔离级别。本篇再重点来讲讲锁类型和加锁原理。

首先对mysql锁进行划分:


标签:MySQL,代理,AVL,关键字,概述,RB,红黑树,节点
From: https://blog.51cto.com/u_15850876/5804534

相关文章

  • javaSE01概述与第一个程序
    java概述与第一个程序为什么是java市场需求高java语言用途广:服务器程序,Android应用,软件工具,嵌入式领域,大数据技术Java语言发展史1991年SUN公司詹姆斯•高斯林提出要求:......
  • CSS_概述与CSS_与html结合方式
    CSS_概述1.概念:Cascading Style Sheets 层叠样式表层叠:多个样式可以作用在同一个html的元素上,同时生效2.将内容展示和样式控制......
  • (八)进程概述
    1程序和进程程序是包含一系列信息的文件,这些信息描述了如何在运行时创建一个进程:二进制格式标识:每个程序文件都包含用于描述可执行文件格式的元信息。内核利用此信息来......
  • Spark SQL概述、函数用法
    SparkSQL  底层还是基于RDD的,常用的语言DSL底层架构    在idea中的操作引入pom依赖<dependency><groupId>org.apache.spark</gr......
  • 事件监听机制、事件-概述、常见事件演示
    事件监听机制概念:某些组件被执行了某些操作后,触发某些代码的执行。事件:某些操作。如:单击,双击,键盘按下了,鼠标移动了事件源:组件。如:按钮文本输入框.........
  • 2.CICD概述
    什么是CI(Continuousintegration持续集成)在传统的软件开发中,集成过程通常在每个人完成工作后的项目结束时进行。整合通常需要数周或数月的时间,可能会非常痛苦。持续集成是......
  • hadoop入门-概述
     第1章Hadoop概述1.1Hadoop是什么1.2Hadoop发展历史(了解) 1.3Hadoop三大发行版本(了解)Hadoop三大发行版本:Apache、Cloudera、Hortonworks。Apache版本最原始......
  • XSD 指示器概述
    通过指示器,我们可以控制在文档中使用元素的方式。指示器有七种指示器:Order指示器:AllChoiceSequenceOccurrence指示器:maxOccursminOccursGroup指示器:GroupnameattributeG......
  • 你了解二叉树,平衡二叉树,红黑树吗
    前言面试过程中,多多少少会问一点数据结构(二叉树)的问题,今天我们来复习一下二叉树的相关问题,文末总结。1.二叉树的由来在jdk1.8之前,HashMap的数据结构由「数组+链表」......
  • 1、Java程序概述
    1、什么是Java?Java是一个完整的平台,有一个庞大的库,其中包含了很多可重用的代码,以及一个提供诸如安全性、跨操作系统的可移植性以及自动垃圾收集等服务的执行环境。2、Ja......