B树(B-树)和B+树原理学习和数据量简单分析计算——<三>

一、B树(B-树)

1.1 B树的定义

B树(B-tree)是一种树状数据结构,它能够存储数据、对其进行排序并允许以O(log n)的时间复杂度运行进行查找、顺序读取、插入和删除的数据结构。
B树,概括来说是一个节点可以拥有多于2个子节点的二叉查找树。

1.2 B树的特征

根节点至少有两个子节点
每个中间节点都包含k-1个元素和k个孩子,其中 m/2 ≤ k ≤ m (m为树的阶)
每个叶子节点都包含k-1个元素,其中 m/2 ≤ k ≤ m (m为树的阶)
每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域划分(一个结点有k个孩子时,必有k-1个元素才能将子树中所有元素划分为k个子集)

1.3 B树的操作

查询:如下图,查询元素8
在这里插入图片描述
第一次磁盘IO:把15所在节点读到内存中,然后与8做比较,小于15,找到下一个节点(5和9对应的节点)

第二次磁盘IO:把5和9所在的节点读到内存中,然后与8做比较,5<8<9,找到下一个节点(6和8对应的节点)

第三次磁盘IO:把6和8所在节点读到内存中,然后与8做比较,找到了元素8

插入: 将元素7插入下图中的B树

在这里插入图片描述
步骤一:自顶向下查找元素7应该在的位置,即在6和8之间

步骤二:三阶B树中的节点最多有两个元素,把6 7 8里面的中间元素上移(中间元素上移是插入操作的关键)

步骤三:上移之后,上一层节点元素也超载了,5 7 9中间元素上移,现在根节点变为了 7 15

步骤四:要对B树进行调整,使其满足B树的特性,最终如下图:

在这里插入图片描述

二、B+树

2.1 B+树是B树的一种变形体,它与B树的差异在于:

有K个子节点的节点必然有K个关键码
非叶节点仅具有索引作用,元素信息均存放在叶节点中
树的所有叶节点构成一个有序链表,可以按照关键码排序的次序遍历全部记录

2.2 B+树的优势:

由于B+树在内部节点上不包含数据信息,因此在内存页中能够存放更多的key。 
数据存放的更加紧密,具有更好的空间局部性。因此访问叶子节点上关联的数据也具有更好的缓存命中率。
B+树的叶子节点都是相连的,因此对整棵树的遍历只需要一次线性遍历叶子节点即可。而且由于数据顺序排列并且相连,
所以便于区间查找和搜索。而B树则需要进行每一层的递归遍历。相邻的元素可能在内存中不相邻,所以缓存命中性没有B+树好。

在这里插入图片描述

2.3 总结
我们知道二叉查找树的时间复杂度是O(logN),效率已经足够高。为什么出现B树和B+树呢?当大量数据存储在磁盘上,进行查询操作时,需要先将数据加载到内存中(磁盘IO操作),而数据并不能一次性全部加载到内存中,只能逐一加载每个磁盘页(对应树的一个节点),并且磁盘IO操作很慢,平衡二叉树由于树深度过大而造成磁盘IO读写过于频繁,进而导致效率低下。为了减少磁盘IO的次数,就需要降低树的深度,那么就引出了B树和B+树:每个节点存储多个元素,采用多叉树结构。这样就提高了效率,比如数据库索引,就是存储在磁盘上,采用的就是B+树的数据结构。

三、InnoDB中一棵B+树能存多少行数据

3.1 问题引入

InnoDB一棵B+树可以存放多少行数据?这个问题的简单回答是:约2千万。为什么是这么多呢?
因为这是可以算出来的,要搞清楚这个问题,我们先从InnoDB索引数据结构、数据组织方式说起。
我们都知道计算机在存储数据的时候,有最小存储单元,这就好比我们今天进行现金的流通最小单位是一毛。
在计算机中磁盘存储数据最小单元是扇区,一个扇区的大小是512字节,而文件系统(例如XFS/EXT4)他的最小单元是块
一个块的大小是4k,而对于我们的InnoDB存储引擎也有自己的最小储存单元——页(Page),一个页的大小是16K。
下面几张图可以帮你理解最小存储单元:
文件系统中一个文件大小只有1个字节,但不得不占磁盘上4KB的空间。
在这里插入图片描述
innodb的所有数据文件(后缀为ibd的文件),他的大小始终都是16384(16k)的整数倍。
在这里插入图片描述
磁盘扇区、文件系统、InnoDB存储引擎都有各自的最小存储单元。
在这里插入图片描述

在MySQL中我们的InnoDB页的大小默认是16k,当然也可以通过参数设置:

show variables like 'innodb_page_size'

在这里插入图片描述
数据表中的数据都是存储在页中的,所以一个页中能存储多少行数据呢?假设一行数据的大小是1k,那么一个页可以存放16行这样的数据。

如果数据库只按这样的方式存储,那么如何查找数据就成为一个问题,因为我们不知道要查找的数据存在哪个页中,也不可能把所有的页遍历一遍,那样太慢了。所以人们想了一个办法,用B+树的方式组织这些数据。如图所示:

在这里插入图片描述
我们先将数据记录按主键进行排序,分别存放在不同的页中(为了便于理解我们这里一个页中只存放3条记录,实际情况可以存放很多),除了存放数据的页以外,还有存放键值+指针的页,如图中page number=3的页,该页存放键值和指向数据页的指针,这样的页由N个键值+指针组成。当然它也是排好序的。这样的数据组织形式,我们称为索引组织表。现在来看下,要查找一条数据,怎么查?

如select * from user where id=5;

这里id是主键,我们通过这棵B+树来查找,首先找到根页,你怎么知道user表的根页在哪呢?其实每张表的根页位置在表空间文件中是固定的,即page number=3的页(这点我们下文还会进一步证明),找到根页后通过二分查找法,定位到id=5的数据应该在指针P5指向的页中,那么进一步去page number=5的页中查找,同样通过二分查询法即可找到id=5的记录:
在这里插入图片描述
现在我们清楚了InnoDB中主键索引B+树是如何组织数据、查询数据的,我们总结一下:

1、InnoDB存储引擎的最小存储单元是页,页可以用于存放数据也可以用于存放键值+指针,在B+树中叶子节点存放数据,非叶子节点存放键值+指针。
2、索引组织表通过非叶子节点的二分查找法以及指针确定数据在哪个页中,进而在去数据页中查找到需要的数据;

那么回到我们开始的问题,通常一棵B+树可以存放多少行数据?

这里我们先假设B+树高为2,即存在一个根节点和若干个叶子节点,那么这棵B+树的存放总记录数为:根节点指针数*单个叶子节点记录行数

上文我们已经说明单个叶子节点(页)中的记录数=16K/1K=16。(这里假设一行记录的数据大小为1k,实际上现在很多互联网业务数据记录大小通常就是1K左右)。

那么现在我们需要计算出非叶子节点能存放多少指针,其实这也很好算,我们假设主键ID为bigint类型,长度为8字节,而指针大小在InnoDB源码中设置为6字节,这样一共14字节,我们一个页中能存放多少这样的单元,其实就代表有多少指针(根节点),即16 * 1024 / 14=1170。那么可以算出一棵高度为2的B+树,能存放1170*16=18720条这样的数据记录。

根据同样的原理我们可以算出一个高度为3的B+树可以存放:1170*1170*16=21902400条这样的记录。所以在InnoDB中B+树高度一般为1-3层,它就能满足千万级的数据存储。在查找数据时一次页的查找代表一次IO,所以通过主键索引查询通常只需要1-3次IO操作即可查找到数据

3.2 怎么得到InnoDB主键索引B+树的高度?

上面我们通过推断得出B+树的高度通常是1-3,下面我们从另外一个侧面证明这个结论。在InnoDB的表空间文件中,约定page number为3的代表主键索引的根页,而在根页偏移量为64的地方存放了该B+树的page level。如果page level为1,树高为2,page level为2,则树高为3。即B+树的高度=page level+1;下面我们将从实际环境中尝试找到这个page level。

在实际操作之前,你可以通过InnoDB元数据表确认主键索引根页的page number为3,你也可以从《InnoDB存储引擎》这本书中得到确认。

SELECT
b.name, a.name, index_id, type, a.space, a.PAGE_NO
FROM
information_schema.INNODB_SYS_INDEXES a,
information_schema.INNODB_SYS_TABLES b
WHERE
a.table_id = b.table_id AND a.space <> 0;

执行结果:
在这里插入图片描述
可以看出数据库dbt3下的customer表、lineitem表主键索引根页的page number均为3,而其他的二级索引page number为4。

下面我们对数据库表空间文件做想相关的解析:
在这里插入图片描述
因为主键索引B+树的根页在整个表空间文件中的第3个页开始,所以可以算出它在文件中的偏移量:(16 * 1024) * 3=49152(16384为页大小)。

另外根据《InnoDB存储引擎》中描述在根页的64偏移量位置前2个字节,保存了page level的值,因此我们想要的page level的值在整个文件中的偏移量为:16384*3+64=49152+64=49216,前2个字节中。

接下来我们用hexdump工具,查看表空间文件指定偏移量上的数据:
在这里插入图片描述
linetem表的page level为2,B+树高度为page level+1=3;

region表的page level为0,B+树高度为page level+1=1;

customer表的page level为2,B+树高度为page level+1=3;

这三张表的数据量如下:
在这里插入图片描述
总结:

lineitem表的数据行数为600多万,B+树高度为3,customer表数据行数只有15万,B+树高度也为3。可以看出尽管数据量差异较大,这两个表树的高度都是3,换句话说这两个表通过索引查询效率并没有太大差异,因为都只需要做3次IO。那么如果有一张表行数是一千万,那么他的B+树高度依旧是3,查询效率仍然不会相差太大。

region表只有5行数据,当然他的B+树高度为1。

3.2 有一道MySQL的面试题,为什么MySQL的索引要使用B+树而不是其它树形结构?比如B树?

现在这个问题的复杂版本可以参考本文;

他的简单版本回答是:

因为B树不管叶子节点还是非叶子节点,都会保存数据,这样导致在非叶子节点中能保存的指针数量变少(有些资料也称为扇出),指针少的情况下要保存大量数据,只能增加树的高度,导致IO操作变多,查询性能变低;

3.3 总结

本文从一个问题出发,逐步介绍了InnoDB索引组织表的原理、查询方式,并结合已有知识,回答该问题,结合实践来证明。当然为了表述简单易懂,文中忽略了一些细枝末节,比如一个页中不可能所有空间都用于存放数据,它还会存放一些少量的其他字段比如page level,index number等等,另外还有页的填充因子也导致一个页不可能全部用于保存数据。关于二级索引数据存取方式可以参考MySQL相关书籍,他的要点是结合主键索引进行回表查询。

参考博客:

https://www.cnblogs.com/51life/p/10303696.html

https://www.cnblogs.com/leefreeman/p/8315844.html

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
一共20套 本科生期末试卷 一 一. 选择题 (每小题1分,共10分) 1. 计算机系统中的存贮器系统是指______。d A RAM存贮器 B ROM存贮器 C 主存贮器 D 主存贮器和外存贮器 2. 某机字长32位,其中1位符号位,31位表示尾数。若用定点小数表示,则最大正小数为______。b A +(1 – 2-32) B +(1 – 2-31) C 2-32 D 2-31 3. 算术 / 逻辑运算单元74181ALU可完成______。c A 16种算术运算功能 B 16种逻辑运算功能 C 16种算术运算功能和16种逻辑运算功能 D 4位乘法运算和除法运算功能 4. 存储单元是指______。c A 存放一个二进制信息位的存贮元 B 存放一个机器字的所有存贮元集合 C 存放一个字节的所有存贮元集合 D 存放两个字节的所有存贮元集合; 5. 相联存贮器是按______进行寻址的存贮器。c A 地址方式 B 堆栈方式 C 内容指定方式 D 地址方式与堆栈方式 6. 变址寻址方式中,操作数的有效地址等于______。c A 基值寄存器内容加上形式地址(位移量) B 堆栈指示器内容加上形式地址(位移量) C 变址寄存器内容加上形式地址(位移量) D 程序记数器内容加上形式地址(位移量) 7. 以下叙述中正确描述的句子是:______。ad A 同一个CPU周期中,可以并行执行的微操作叫相容性微操作 B 同一个CPU周期中,不可以并行执行的微操作叫相容性微操作 C 同一个CPU周期中,可以并行执行的微操作叫相斥性微操作 D 同一个CPU周期中,不可以并行执行的微操作叫相斥性微操作 8. 计算机使用总线结构的主要优点是便于实现积木化,同时______。c A 减少了信息传输量 B 提高了信息传输的速度 C 减少了信息传输线的条数 D 加重了CPU的工作量 9. 带有处理器的设备一般称为______设备。a A 智能化 B 交互式 C 远程通信 D 过程控制 10.某中断系统中,每抽取一个输入数据就要中断CPU一次,中断处理程序接收取样的数 据,并将其保存到主存缓冲区内。该中断处理需要X秒。另一方面,缓冲区内每存储 N 个数据,主程序就将其取出进行处理,这种处理需要Y秒,因此该系统可以跟踪到每 秒______次中断请求。 A.N / (NX + Y) B. N / (X + Y)N C .min[1 / X ,1 / Y] D. max[1 / X ,1 / Y] 二. 填空题(每小题3分,共24分) 1.存储A.______并按B.______顺序执行,这是C.______型计算机的工作原理。 2.移码表示法主要用于表示A.______数的阶码E,以利于比较两个B.______的大小和 C.______操作。 3.闪速存储器能提供高性能、低功耗、高可靠性及A.______能力,为现有的B.______体 系结构带来巨大变化,因此作为C.______用于便携式电脑中。 4.寻址方式按操作数的A.______位置不同,多使用B.______和C.______型,前者比后者执 行速度快。 5.微程序设计技术是利用A.______方法设计B.______的一门技术。具有规整性、可维护 性、C .______等一系列优点。 6.衡量总线性能的重要指标是A.______,它定义为总线本身所能达到的最高B.______。PCI 总线的带宽可达C.______。 7.显示适配器作为CRT和CPU的接口,由A. ______存储器,B. ______控制器,C. ______ 部分组成。 8.DMA技术的出现使得A. ______可通过B. ______直接访问C. ______。 . 应用题 1. (11分)设机器字长32位,定点表示,尾数31位,数符1位,问: (1) 定点原码整数表示时,最大正数是多少?最大负数是多少? (2) 定点原码小数表示时,最大正数是多少?最大负数是多少? 2. (11分)设存储器容量为32字,字长64位,模块数m = 4,分别用顺序方式和交叉方式进行组织。存储周期T = 200ns,数据总线宽度为64位,总线周期τ = 50ns .问顺序存储器和交叉存储器的带宽各是多少? 3. (11分)指令格式如下所示,OP为操作码字段,试分析指令格式特点。 31 26 22 18 17 16 15 0 4. (11分)已知某机采用微程序控制方式,其存储器容量为512×48(位),微程序在整个控制存储器中实现转移,可控制微程序的条件共4个,微指令采用水平型格式,后继微指令地址采用断定方式,如图所示: ←操作控制→ ←—————— 顺序控制 ————————→ (1) 微指令中的个字段分别应多少位? (2) 画出对应这种微指令格式的微程序控制器逻辑框图。 5. (11分)画出PCI总线结构图,说明种桥的功能。 6. (11分)某机用于生产过程中的温度数据采集,每个采集器含有8位数据缓冲寄存器一个,比较器一个,能与给定范围比较,可发出“温度过低”或“温度过高”的信号,如图B1.1所示。主机采用外设单独编址,四个采集器公用一个设备码,共用一个接口,允许采用两种方式访问: (1) 定期巡回检测方式,主机可编程指定访问该设备中的某一采集器。 (2) 中断方式,当采集温度比给定范围过底或过高时能提出随机中断请求,主机应能判别是哪一个采集器请求,是温度过低或过高。 请拟定该接口中有哪些主要部件(不要求画出完整的连线图),并概略说明在两 种方式下的工作原理
前端性能优化实践# 知识体系与小册格局 ## 写给读者 提起性能优化,大家现在脑海里第一时间会映射出什么内容呢? 可能是类似[“雅虎军规”](https://developer.yahoo.com/performance/rules.html?guccounter=1)和[《高性能 JavaScript》](https://book.douban.com/subject/5362856/)这样历久弥香的经典之作,也可能是搜索引擎聚合给你的一篇又一篇以性能优化为主题的个人或团队实践而来的“私货”。至少当我确定自己的研发方向、并接到第一个性能优化任务时,我做的第一件事是向搜索引擎求助,第二件事是买书,然后开始了摸着石头过河,前后花费了大量的时间和精力。我深感性能优化实在是前端知识中特别的一环——当你需要学习前端框架时,文档和源码几乎可以告诉你所有问题的答案,当你需要学习 Git 时,你也可以找到放之四海皆准的实践方案。但性能优化却不一样,它好像只能是一个摸索的过程。 这个摸索的过程是痛苦的、漫长的,也是紧要的。因为在如今的互联网环境下,一个前端团队如果只把性能优化这个任务写在纸上,而不投入实践,它将缺失最基本的竞争力。 笔者写这本小册,是希望通过短短十数个章节的讲解,尽可能降低一些大家学习性能优化的成本。 一方面,这本小册为没有接触过性能优化的新同学建立起一个正确的前端性能优化的“世界观”,知道性能优化是什么、为什么、怎么做,从而使性能优化这件事情有迹可循,有路可走。这样在面试现场被问到性能优化层面的问题时,能够做到滔滔不绝、言之有物,而非像背书一样罗列干巴巴的知识点,最终淹没在茫茫的求职大军中。另一方面,小册可以为在职的工程师们提供一线团队已经实践过的“方法论”,知道什么场景下该做什么事情,最终在脑海中留下一张涵盖核心原理和实践的、可随时查阅并且高度可扩展的性能优化思路索引表。然后在今后的开发生活中可以去践行它,更进一步去挖掘它。把性能优化变作你前端工程师生涯的一门必修课,进而演化为自己研发方面的核心竞争力。 同时,相信大家可以明确这样一个学习观念:任何技术的掌握,都离不开一定比例的理论基础和实际操作的支撑。 具体到前端性能优化这件事情上,我认为它是 20% 的理论,加上至少 80% 的实践,甚至很多理论本身也都是我们在具体的业务场景中实践出来的。所以希望大家阅读本小册时,能够读到一些“书本之外的东西”——最好是一边读一边回忆自己既有的开发经历,尝试去留意哪些知识是已知的,哪些是未知的。 这样读完之后,就可以有的放矢地把这些知识转换为自己的项目实践——前端技术日新月异,性能方案永远都在更迭,所以一定要形成自己的学习思路。 建议每一位读者都带着“学了就要用”的心态去读这本小册。如果阅读结束,能够为你带来哪怕一个小小的开发习惯或者优化观念上的改变,这数小时的阅读时间就算没有白费。 ## 知识体系: 从一道面试题说起 在展开性能优化的话题之前,我想先抛出一个老生常谈的面试问题: > 从输入 URL 到页面加载完成,发生了什么? 这个问题非常重要,因为我们后续的内容都将以这个问题的答案为骨架展开。我希望正在阅读这本小册的各位可以在心里琢磨一下这个问题——无须你调动太多计算机的专业知识,只需要你用最快的速度在脑海中架构起这个抽象的过程——我们接下来所有的工作,就是围绕这个过程来做文章。 我们现在站在性能优化的角度,一起简单地复习一遍这个经典的过程:首先我们需要通过 DNS(域名解析系统)将 URL 解析为对应的 IP 地址,然后与这个 IP 地址确定的那台服务器建立起 TCP 网络连接,随后我们向服务端抛出我们的 HTTP 请求,服务端处理完我们的请求之后,把目标数据放在 HTTP 响应里返回给客户端,拿到响应数据的浏览器就可以开始走一个渲染的流程。渲染完毕,页面便呈现给了用户,并时刻等待响应用户的操作(如下图所示)。 ![](https://user-gold-cdn.xitu.io/2018/10/18/16685737b823244c?w=489&h=329&f=png&s=19023) 我们将这个过程切分为如下的过程片段: 1. DNS 解析 2. TCP 连接 3. HTTP 请求抛出 4. 服务端处理请求,HTTP 响应返回 5. 浏览器拿到响应数据,解析响应内容,把解析的结果展示给用户 大家谨记,我们任何一个用户端的产品,都需要把这 5 个过程滴水不漏地考虑到自己的性能优化方案内、反复权衡,从而打磨出用户满意的速度。 ## 从原理到实践:各个击破 我们接下来要做的事情,就是针对这五个过程进行分解,各个提问,各个击破。 具体来说,DNS 解析花时间,能不能尽量减少解析次数
阿⾥巴巴⼤数据之路 阿⾥巴巴⼤数据之路——数据技术篇 数据技术篇 ⼀、整体架构 ⼀、整体架构      从下⾄上依次分为数据采集层、数据计算层、数据服务层、数据应⽤层    数据采集层:以DataX为代表的数据同步⼯具和同步中⼼    数据计算层:以MaxComputer为代表的离线数据存储和计算平台    数据服务层:以RDS为代表的数据库服务(接⼝或者视图形式的数据服务)    数据应⽤层:包含流量分析平台等数据应⽤⼯具 ⼆、数据采集(离线数据同步) ⼆、数据采集(离线数据同步)   数据采集主要分为⽇志采集和数据库采集。⽇志采集暂略(参考书籍原⽂)。我们主要运⽤的是数据库采集(数据库同步)。   通常情况下,我们需要规定原业务系统表增加两个字段:创建时间、更新时间(或者⾄少⼀个字段:更新时间)   数据同步主要可以分为⼤类:直连同步、数据⽂件同步、数据库⽇志解析同步   1.直连同步     通过规范好的接⼝和动态连接库的⽅式直接连接业务库,例如通过ODBC/JDBC进⾏直连     当然直接连接业务库的话会对业务库产⽣较⼤压⼒,如果有主备策略可以从备库进⾏抽取,此⽅式不适合直接从业务库到数仓的情景   2.数据⽂件同步     从源系统⽣成数据⽂本⽂件,利⽤FTP等传输⽅式传输⾄⽬标系统,完成数据的同步     为了防⽌丢包等情况,⼀般会附加⼀个校验⽂件 ,校验⽂件包含数据量、⽂件⼤⼩等信息     为了安全起见还可以加密压缩传输,到⽬标库再解压解密,提⾼安全性   3.数据库⽇志同步     主流数据库都⽀持⽇志⽂件进⾏数据恢复(⽇志信息丰富,格式稳定),例如Oracle的归档⽇志   (数据库相关⽇志介绍,参考:)    4.阿⾥数据仓库同步⽅式     1)批量数据同步     要实现各种各样数据源与数仓的数据同步,需要实现数据的统⼀,统⼀的⽅式是将所有数据类型都转化为中间状态,也就是字符串类型。以此来实现数据格式的统⼀。     产品——阿⾥DataX:多⽅向⾼⾃由度异构数据交换服务产品,产品解决的主要问题:实现跨平台的、跨数据库、不同系统之间的数据同步及交互。     产品简介:     开源地址:     更多的介绍将会通过新开随笔进⾏介绍!(当然还有其他主流的数据同步⼯具例如kettle等!)     2)实时数据同步     实时数据同步强调的是实时性,基本原理是通过数据库的⽇志(MySQL的bin-log,Oracle的归档⽇志等)实现数据的增量同步传输。     产品——阿⾥TimeTunnel(简称TT)。TT产品本质是⼀个⽣产者、消费者模型的消息中间件     3)常见问题       1.增量数据与全量数据的合并         主要的场景是数据同步中周期全量同步,对应的解决⽅案是每次只同步变更的数据,然后和上⼀周期合并,形成最新的全量数据(选择此⽅案的原因是绝⼤多 数⼤数据平台不⽀持update操作)         具体的⽅案主要有union的联合操作(可以通过⽣成增量中间表detal)与阿⾥主推的全外连接full outer join+全量覆盖insert overwrite的形式。实例参考如下: SQL的Join语法有很多, inner join(等值连接) 只返回两个表中联结字段相等的⾏, left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录, right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录, 假设我们有两张表。Table A 是左边的表。Table B 是右边的表。其各有四条记录,其中有两条记录name是相同的,如下所⽰: A表 id name 1 Pirate 2 Monkey 3 Ninja 4 Spaghetti B表 id name 1 Rutabaga 2 Pirate 3 Darth Vade 4 Ninja 让我们看看不同JOIN的不同。 FULL [OUTER] JOIN (1) SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name TableA.name = TableB.name 的情况,A和B的交集有两条数据,那么 FULL OUTER JOIN的结果集, 应该是2+2+2=6条,即上⾯的交集,再加剩下的四条数据,没有匹配,以null补全。 结果集 (TableA.) (TableB.) id name id name 1 Pirate 2 Pirate 2 Monkey null null 3 Ninja 4 Ninja 4 Spaghetti null null null null 1 Rutabag
环保电子点烟器是由电池供电,电池可以充电,放电几百次,(在电池没完全放完电之前,即用即充会延长电池的使用寿命)。 本产品 usb 接口仅用于充电。本产品 usb 接口可连接在电脑,手机充电器等任何输出电压力 DC5V+0.5V,输出电流 3000MA 以下的充电上充电。 初次使用或长时间未使用,请先连接充电器,然后断开并重新连接充电器进行充电。充足电后请立即断开电源,(一般完全充电时间为3小时) 请勿长时间将完全充电的电池连接在电源上,过充会缩短电池的使用寿命。 主要特点: 1、usb方式充电或可通过类似充电数据的充电器充电,循环使用。可充电放电几百小时。相对寿命还是很长的哦! 2、充电时间短(充电时长为1.5小时-3小时左右,充满电可使用一周时间左右,(以一天抽一包烟计算) 3、防风点烟; 4、无声点烟; 5、无需充气灌油; 点烟器原理分析: a、D1是肖特基二极管(封装SS14)。用肖特基二极管SBD(Schottky Barrier Diode)代替普通的二极管。肖特基二极管的优点在于正向偏置电压较低,这样的话损失的压降小。 b、U1极管(封装:SOT-23)。这个小功率极管。极管具有电流放大作用,其实质是极管能以基极电流微小的变化量来控制集电极电流较大的变化量。这是极管最基本的和最重要的特性。那么这里的极管就是对usb的电流进行放大,然后在弹片接触触电的时候,实现电热丝两端较大电流使之发热。
计算与⼤数据——分布式计算 分布式计算是⼀种计算⽅法,和集中式计算是相对的。 随着计算技术的发展,有些应⽤需要⾮常巨⼤的计算能⼒才能完成,如果采⽤集中式计算,需要耗费相当长的时间来完成。 分布式计算将该应⽤分解成许多⼩的部分,分配给多台计算机进⾏处理。这样可以节约整体计算时间,⼤⼤提⾼计算效率。 分布式计算⽐起其它算法具有以下⼏个优点: 1、稀有资源可以共享。 2、通过分布式计算可以在多台计算机上平衡计算负载。 3、可以把程序放在最适合运⾏它的计算机上。 其中,共享稀有资源和平衡负载是计算机分布式计算的核⼼思想之⼀。 ⽹格计算 ⽹格计算就是分布式计算的⼀种。如果某项⼯作是分布式的,那么,参与这项⼯作的⼀定不只是⼀台计算机,⽽是⼀个计算机⽹络,这 种"蚂蚁搬⼭"的⽅式将具有很强的数据处理能⼒。 ⽹格计算的实质就是组合与共享资源并确保系统安全。 ⼯作原理 分布式计算是利⽤互联⽹上的计算机的中央处理器的闲置处理能⼒来解决⼤型计算问题的⼀种计算科学。下⾯,我们看看它是怎么⼯作的: 越来越多的电脑处于闲置状态,即使在开机状态下中央处理器的潜⼒也远远不能被完全利⽤。我们可以想象,⼀台家⽤的计算机将⼤多数的 时间花费在"等待"上⾯。即便是使⽤者实际使⽤他们的计算机时,处理器依然是寂静的消费,依然是不计其数的等待(等待输⼊,但实际上 并没有做什么)。互联⽹的出现, 使得连接调⽤所有这些拥有限制计算资源的计算机系统成为了现实。 那么,⼀些本⾝⾮常复杂的但是却很适合于划分为⼤量的更⼩的计算⽚断的问题被提出来,然后由某个研究机构通过⼤量艰⾟的⼯作开发出 计算⽤服务端和客户端。服务端负责将计算问题分成许多⼩的计算部分,然后把这些部分分配给许多联⽹参与计算计算机进⾏并⾏处理, 最后将这些计算结果综合起来得到最终的结果。 ⽬前⼀些较⼤的分布式计算项⽬的处理能⼒已经可以达到甚⽽超过⽬前世界上速度最快的巨型计算机。 BOINC分布式计算平台 BOINC是Berkeley Open Infrastructure for Network Computing的简称,即伯克利开放式⽹络计算平台。 BOINC是不同分布式计算可以共享的分布式计算平台。不同分布式计算项⽬可以直接使⽤BOINC的公⽤上传下载系统、统计系统等,这样 不仅可以发挥各个分布式计算之间的协调性,也能使分布式计算的管理、使⽤更加⽅便易⽤。 BOINC项⽬由美国加州⼤学伯克利分校(U.C.Berkeley)主持发起。 BOINC项⽬由美国国家科学基⾦会(National Science Foundation)赞助。 BOINC有⾃⼰的积分系统,因为在BOINC上可以运⾏的项⽬千差万别,⽐如项⽬A的任务包(Workunit,简称WU)在某台机器⾥需要3个⼩ 时完成,⽽项⽬B的任务包在这台机器⾥需要30个⼩时才能完成,显然⽤WU的数⽬来衡量⼯作量是不可⾏的;类似的,机器性能也有差 别,⽤CPU时间来衡量⼯作量更是不⾏的。积分系统只能通过⼀定的算法得到⽤户实际完成的计算量,这篇⽂章对BOINC中积分的计算⽅ 法进⾏了说明。 分布式计算与⼈类 由于现代⼈类各个课题学科繁多,涉及⾯⼴,⽽分类⼜细。⽽当今的每个学科似乎都需要进⾏⼤量的计算。天⽂学研究组织需要计算机来分 析太空脉冲(pulse),星位移动;⽣物学家需要计算机来模拟蛋⽩质的折叠(protein folding)过程;药物学家想要研制克服艾滋病 (AIDS)或⾮典(SARS)的药物;数学家想计算最⼤的质数和圆周率的更精确值;经济学家要⽤计算分析计算在⼏万种因素考虑下某 个企业/城市/国家的发展⽅向从⽽宏观调控。由此可见,⼈类未来的科学,时时刻刻离不开计算。⽽分布式计算(Distributed Computing),以其独特的优点——便宜、⾼效⽽越来越受到社会的关注。 分布式计算格局 就⽬前来看,全球的各种分布式计算已有约百种,这些计算⼤多互⽆联系、独⽴管理、独⽴使⽤⾃⼰的⼀套软件。这种分布式计算互相割据 的格局很不利于发展的需要。⽐如,某个⽣物学研究机构需要利⽤世界各地志愿者的计算机来模拟蛋⽩质折叠的过程,那个⽣物学研究机构 没有分布式计算⽅⾯的专业⼈才,⽽但是社会上也并没有任何公司可以提供这样的服务,他们就不得不⾃⼰花费⼤量精⼒⽤于开发分布式计 算的服务器、客户端。这样⼀来,原来可以⽤于研究⽣物的时间⽤在了别的地⽅。刚才提到的⽣物学研究机构就是美国斯坦福⼤学的 PANDE⼩组。 安全性 对⽤户⽅来说,加⼊任何⼀个项⽬之前,您必须确保您可以信任项⽬的研制⽅,主要涉及两⽅⾯: 计算机上的隐私数据 您从项⽬⽅下载的计算程序,运⾏在本机,⽽且可以访问⽹络,因此,只有可靠的项⽬⽅才能保证您计算机上的隐私数据不会恶意的取⾛、 修改等。 个⼈计算机的寿命 虽
B树、B-B+树都是一种平衡的多路查找,用于在磁盘等外部存储设备中进行高效的查找操作。 B树是一种平衡的多路查找,每个节点可以存储多个数据,并且每个节点可以有多个子节点。B树的每个节点存储了一定的范围区间,这样可以加快搜索速度。例如,对于1~100的索引值,B树可以将其划分为多个区间,从而一次性排除大部分数据,使搜索更加高效。 B-B树的一种变体,它的每个节点可以存放多个数据和子节点,并且相邻的叶节点之间可以相互连接,这样可以增加区间访问性能,适用于范围查询等操作。 B+树也是B树的一种变体,与B树和B-不同的是,B+树的叶子节点之间互相连接,而非叶子节点只存储索引信息,数据只存在于叶子节点中。这样可以提高区间查询的性能,并且也适用于范围查询等操作。 总结来说,B树、B-B+树都是一种平衡的多路查找,用于在磁盘等外部存储设备中进行高效的查找操作。它们的区别在于节点的存储方式和叶子节点的连接方式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [B-B树B+树](https://blog.csdn.net/weixin_42386551/article/details/117604839)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [B-B+树的区别](https://blog.csdn.net/liuyuan1999/article/details/127382525)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值