240 发简信
IP属地:北京
  • B-树和B+树最重要的一个区别就是B+树只有叶节点存放数据,其余节点用来索引,而B-树是每个索引节点都会有Data域。这就决定了B+树更适合用来存储外部数据,也就是所谓的磁盘数据。从Mysql(Inoodb)的角度来看,B+树是用来充当索引的,一般来说索引非常大,尤其是关系性数据库这种数据量大的索引能达到亿级别,所以为了减少内存的占用,索引也会被存储在磁盘上。那么Mysql如何衡量查询效率呢?磁盘IO次数,B-树(B类树)的特定就是每层节点数目非常多,层数很少,目的就是为了就少磁盘IO次数,当查询数据的时候,最好的情况就是很快找到目标索引,然后读取数据,使用B+树就能很好的完成这个目的,但是B-树的每个节点都有data域(指针),这无疑增大了节点大小,说白了增加了磁盘IO次数(磁盘IO一次读出的数据量大小是固定的,单个数据变大,每次读出的就少,IO次数增多,一次IO多耗时啊!),而B+树除了叶子节点其它节点并不存储数据,节点小,磁盘IO次数就少。这是优点之一。另一个优点是什么,B+树所有的Data域在叶子节点,一般来说都会进行一个优化,就是将所有的叶子节点用指针串起来。这样遍历叶子节点就能获得全部数据,这样就能进行区间访问啦。至于MongoDB为什么使用B-树而不是B+树,可以从它的设计角度来考虑,它并不是传统的关系性数据库,而是以Json格式作为存储的nosql,目的就是高性能,高可用,易扩展。首先它摆脱了关系模型,上面所述的优点2需求就没那么强烈了,其次Mysql由于使用B+树,数据都在叶节点上,每次查询都需要访问到叶节点,而MongoDB使用B-树,所有节点都有Data域,只要找到指定索引就可以进行访问,无疑单次查询平均快于Mysql(但侧面来看Mysql至少平均查询耗时差不多)。总体来说,Mysql选用B+树和MongoDB选用B-树还是以自己的需求来选择的。( 摘抄来的,做个笔记 -_- )

  • 哈希表

    IO多路复用的三种机制Select,Poll,Epoll

    I/O多路复用(multiplexing)的本质是通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个文件描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通...

  • 额。。同步和异步的区别还是要说一下:
    同步和异步是相对于应用和内核的交互方式来说的,同步是应用程序只关注就绪事件,真正的IO读写是应用自己完成的,异步是应用程序关注完成事件,真正的IO是内核做的,IO完成后通知程序。不知道说明白没有,可以参考java的一些概念:
    BIO(同步阻塞)
    NIO(同步非阻塞)
    AIO(异步非阻塞)

    IO多路复用的三种机制Select,Poll,Epoll

    I/O多路复用(multiplexing)的本质是通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个文件描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通...

  • MySql主从不同步原因分析及解决方案

    原因分析 1.网络的延迟由于mysql主从复制是基于binlog的一种异步复制,通过网络传送binlog文件,理所当然网络延迟是主从不同步的绝大多数的原因,特别是跨机房的数据...

  • 120
    Netty笔记4-如何实现长连接

    ​ 前面三章介绍了Netty的一些基本用法,这一章介绍怎么使用Netty来实现一个简单的长连接demo。 Netty入门教程——认识Netty Netty入门教程2——动...

  • 120
    Netty入门教程——认识Netty

    什么是Netty? Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架。Netty 是一个广泛使用的 J...

  • PHP的单例模式

    php的单例模式和java单例模式的比较 PHP语言是一种解释型的脚本语言,这种运行机制使得每个PHP页面被解释执行后,所有的相关资源都会被回收。也就是说,PHP在语言级别上...

  • isset(),is_null(),empty()区别

    isset() isset() 函数用于检测变量是否已设置并且非 NULL。如果已经使用 unset() 释放了一个变量之后,再通过 isset() 判断将返回 FALSE。...

  • 120
    分布式事务之两阶段提交协议(2PC)

    两阶段提交协议(Two-phase Commit,2PC)经常被用来实现分布式事务。一般分为协调器C和若干事务执行者Si两种角色,这里的事务执行者就是具体的数据库,协调器可以...

  • 120
    使用事件和消息队列实现分布式事务

    不同于单一架构应用(Monolith), 分布式环境下, 进行事务操作将变得困难, 因为分布式环境通常会有多个数据源, 只用本地数据库事务难以保证多个数据源数据的一致性. 这...

  • 120
    B树的插入过程

    我们设定B-树的阶为5。用关键字序列{1,2,6,7,11,4,8,13,10,5,17,9,16,20,3,12,14,18,19,15}来构建一棵B-树。 因为树的阶为5...

  • php如何获取Request Header

    最近做php跨域调用的方案,其中要保证两个前端域名a.com,b.com都可以访问后端域名server.com,而且不同的前端域请求,服务端逻辑处理不一样,要做前端域名的判断...

  • 不是完全赞同,在成长型的小公司,对于人才的要求和你能力提升的空间还是很大的,往往会大于大公司的能力提升,因为大公司所有员工都是一个螺丝钉,你只能在你的空间内做事情,而且大公司对于员工的可替代性诉求比较高,走任何一个人都不会影响到公司的运营,小公司则不同,你可能要面对各种问题,解决各种难题,虽然吐槽会比较多,但是你真正得到了锻炼,技能和视野无形当中得到了提升,世上没有白吃的苦,任何公司都是从小到大的,马云当时不也是12个人的公司吗?
    关键是你对公司未来的预判,在这里是否可以成长,跟公司大小没关系。

    千万别进小公司!为啥?

    为什么“千万不要去小公司上班”?小公司的“小”究竟说的是什么?就让被小公司坑过的我来为你解答吧。 ​何为“小”公司 小公司的“小”说的是什么呢?不仅是指办公室小、职员少,更可...

个人介绍
知人者智,自知者明
qianyang.wang@gmail.com