精华内容
下载资源
问答
  • GPS卫星定位基本原理

    万次阅读 多人点赞 2020-12-20 18:04:39
    GPS定位基本原理 伪距定位的基本原理 一个站星距离 测站位于以卫星为球心,站星距离为半径的球面上 两个站星距离 构成两个球面 两个球面相交为圆 测站位于圆圈上 三个站星距离 构成三个球面 三个球面两两相交 测...

    GPS定位基本原理
    在这里插入图片描述
    GPS测量定位方法分类
    定位模式:
    绝对定位(单点定位)
    相对定位
    差分定位
    定位时接收机天线的运动状态:
    静态定位-天线相对于地固坐标系静止
    动态定位-天线相对于地固坐标系运动
    获得定位结果的时效:
    事后定位
    实时定位
    观测值类型:
    伪距测量
    载波相位测量

    伪距定位的基本原理

    一个站星距离
    测站位于以卫星为球心,站星距离为半径的球面上
    在这里插入图片描述
    两个站星距离
    构成两个球面
    两个球面相交为圆
    测站位于圆圈上
    在这里插入图片描述
    三个站星距离
    构成三个球面
    三个球面两两相交
    测站位于其中任意一点
    三个站星距离+地球表面=一点
    在这里插入图片描述

    伪距测量

    **伪距概念:**就是由卫星发射的测距码信号到达GPS接收机的传播时间
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    码相关伪距测量原理:
    1.卫星依据自己时钟(钟脉冲)发出某一结构的测距码,经过Δt时的传播到达GPS接收机。
    2.接收机在自己钟脉冲驱动下,产生一组结构完全形图的复制码。
    3.通过时延器使之延迟时间τ,对两码进行相关比较。
    4.直至两码完全对齐,相关系数R(t)=max=1,则该事件延迟τ即为传播时间Δt(τ=Δt)
    5.距离ρ=c•Δt=c•τ。
    为什么采用码相关技术来确定伪距?
    GNSS卫星发出的测距码是按照某一规律排列的,在一周期内每个码对应某一特定的时间。应该说识别每个码的形状特征,即用每个码的某一标志即可推出时延值Δt进行伪距测量。
    GPS伪随机码的特性
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    伪距定位数学模型(四颗星)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    伪距定位观测方程(另一种推导方式)
    在这里插入图片描述
    在这里插入图片描述
    伪距测量的特点
    优点:无模糊度
    缺点:精度低

    载波相位测量

    为什么采用载波相位测量?
    1.测距码测距精度对于一些高精度的应用无法满足。
    2.载波的波长短,所以就可达到很高的精度。
    载波相位测量的特点
    优点:精度高,测距精度可达0.1mm量级。
    难点:整周未知数问题;整周跳变问题。
    载波相位测量的关键技术—重建载波
    重建载波:将非连续的载波信号恢复成连续的载波信号。
    在这里插入图片描述
    码相关法:
    方法: 将所接收的调制信号(卫星信号)与接收机产生的复制码相乘。
    技术要点:卫星信号(弱)与接收机信号(强)相乘
    特点:
    限制:需要了解码的结构
    优点:可获得导航电文,可获得全波长的载波,信号质量好(信噪比高)
    在这里插入图片描述
    平方法:
    方法: 将所接收到的调制信号(卫星信号)自乘
    技术要点:卫星信号(弱)自乘
    特点:
    优点: 无需了解码的结构
    缺点: 无法获得导航电文,所获载的波波长比原来波长的一半,信号质量较差(信噪比低,降低了30dB)
    在这里插入图片描述
    互相关(交叉相关)
    方法:在不同频率的调制信号(卫星信号)进行相关处理,获取两个频率间的伪距差和相位差
    在这里插入图片描述
    技术要点: 不同频率的卫星信号(弱)进行相关
    特点:
    优点: 无需了解Y解码的结构,可获得导航电文,可获得全波波长的载波,信号质量较平方法好(信噪比降低了27dB)
    在这里插入图片描述
    Z跟踪
    方法:将卫星信号在一个W码码元内与接收机复制出的P码进行相关处理
    技术要点:在一个W码码元内进行卫星信号(弱)与复制信号(强)进行相关
    特点:无需了解Y码结构,可测定双频伪距观测值,可获得导航电文,可获得全波波长的载波,信号质量较平方法好(信噪比降低14dB)

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    载波相位观测的观测量定义:是GNSS接收机所接收的卫星载波信号与接收机本振擦模考信号的相位差。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    载波相位测量和伪距测量的比较
    相同点:距离交会定位
    不同点:
    1.伪距定位通过测距码测距,载波相位定位通过载波相位定位。
    2.伪距定位数据处理简单,精度低,载波相位定位数据处理复杂,精度高。
    伪距测量与载波相位测量的观测方程的联系:
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    静态相对定位(差分)

    概述
    定义:确定进行同步观测的接收机之间相对位置的定位方法,称为相对定位。
    差分观测值的定义:将相同频率的GPS载波相位观测值依据某种方式求差所获得的新的组合观测值(虚拟观测值)
    定位结果:与所用星历同属于一坐标系的基线向量(坐标差)及其精度信息。
    采用广播星历时属WGS-84
    采用IGS- International GPS Service精密星历时ITRF- International Terrestrial Reference Frame
    基线向量中含有:2个方位基准(一个水平方法个垂直方位)和1个尺度基准,不含有位置基准。
    优点:定位精度高
    缺点:多态接收共同作业,作业复杂;数据处理复杂;不饿能直接获取绝对坐标。
    应用:高精度测量定位及导航
    观测值之间的线性组合:利用观测量的不同组合(求差)进行相对定位,可以有效的消除误差。
    差分观测值的特点:可以消去某些不重要的参数,或将某些对确定待定参数由较大负卖你影响的因素消去或消弱其影响。
    求差方式:站间求差;卫星间求差;历元间求差

    **站间求差:**GPS载波相位观测值可以在卫星间求差,在接收机间求差也可以在不同历元间求差。将观测值直接相减的过程叫做一次差。
    在这里插入图片描述
    在这里插入图片描述
    二次差或双差——卫星间求差
    在这里插入图片描述
    在这里插入图片描述
    星间求差(星间差分)
    在这里插入图片描述

    三差——历元间求差
    在这里插入图片描述
    在这里插入图片描述
    单插、双差和三差
    在这里插入图片描述
    采用差分观测值的缺陷:
    数据利用率低:只有同步数据才能进行差分
    引入基线矢量代替了位置矢量
    差分观测值间具有了相关性,是处理问题复杂化:参数估计时,观测值的权阵
    某些参数无法求出:某些信息在差分观测值钟被消除

    观测方程的线性化及平差模型
    在这里插入图片描述
    各种误差对相对定位结果的影响
    在这里插入图片描述

    整周模糊度的确定

    在这里插入图片描述

    静态相对定位中常用的几种方法

    待定参数法—经典方法
    1.取整法
    2.置信区间法
    在这里插入图片描述
    3。模糊函数法
    整数解:
    基本方法:
    1.求初始解:确定基线向量的实数解和整周未知数的实数解
    2.将整周模糊度固定为整数
    3.求固定解
    实数解:基线较长,误差相关性减弱,初始解的误差将随之增大,从而使模糊度参数很难固定,整数化的意义不大。

    快速定位中的常用方法

    走走停停和快速静态定位法是两种具有代表性的快速定位法。
    确定整周未知数的方法:
    1.走走停停法
    已知基线法:将已修复周跳、提出粗差后的双差载波相位观测值组成法方程式。然后将已知的基线向量代入法方程并求解模糊度参数,最后再用取整法或置信区间法将得到的实数模糊度固定为整数。
    交换天线法
    在这里插入图片描述

    2.快速静态定位法
    快速模糊度解算法
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    动态定位中用的方法

    初始化法:
    运动载体处于静止状态时与地面基准站一起通过”初始化“来确定整周模糊度,然后运动载体开始运动,进行定位。
    实时阶段模糊度的方法:
    1.确定搜素区域:
    坐标搜索法
    模糊度搜索法
    2.可采用的方法
    模糊度函数法
    最小二乘模糊度搜索法
    FARA法
    会所模糊度搜索滤波法
    LAMBDA法

    周跳的探测与修复

    相关概念
    整周跳变(周跳)——Int(φ)有误差。
    信号失锁:由于GPS卫星信号被某些建筑物、障碍物暂时阻断,致使接收到的卫星信号产生中断。
    在某一特定时刻的载波相位观测值为
    在这里插入图片描述
    整周跳变产生的原因
    信号被遮挡,导致卫星信号无法连续跟踪
    仪器故障,导致基准信号无法与卫星信号混频产生
    由于外界干扰或接收机所处的动态条件恶劣(动态定位),使载波跟踪环路无法锁定信号
    卫星信号信噪比过低,导致整周计数错误
    卫星瞬时故障,无法产生信号
    周跳的特性:
    只影响整周计数-周跳为波长的整数倍
    具有继承性:将影响从周跳发生时刻(历元)之后的所有观测值
    周跳探测与修复的方法
    整周跳变的修复:
    在平差之前数据预处理阶段利用一定的探测方法探测出在何时产生了整周跳变,采取相应的模型确定丢失的整周数,将其恢复为正确的计数,这一过程称为整周跳变的修复。
    基本思想:
    载波相位观测值体现了卫地距离的变化,它应该是一个连续的变化量。
    周跳的探测方法
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    检测周跳的几点说明:
    1、检测周跳是个复杂的过程,需要上面各种方法的综合。
    2、通常使用的时候,使用双差观测值进行探测。

    GPS绝对定位(单点定位)

    单点定位简介
    定义:单独利用一台接收机确定待定点在地固坐标系中的绝对位置的方法
    定位结果—与所用星历同属于同一坐标系的绝对坐标
    在这里插入图片描述
    特点
    优点:一台接收机单独定位,观测简单,可瞬间定位
    缺点:精度主要受系统性偏差的影响,定位精度低
    应用领域:低精度导航、资源普查、军事。。。
    绝对定位的实质
    在这里插入图片描述
    在这里插入图片描述
    绝对定位:接收机天线处于静止状态下,确定观测站坐标的方法称为常态绝对定位。这时,可以连续地在不同历元同步观测不同的卫星,测定卫星至观测站的伪距,获得处分的多余观测量。测后通过数据处理求得观测站的绝对坐标。

    伪距法绝对定位

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    说明应用测相伪距法进行静态绝对定位时,由于存在整周不确定性,在同样观测4颗卫星的情况下,至少于3个不同历元对4颗相同卫星进行同步观测。当观测时间较短,定位精度要求不高时,可把接收机钟差视为常数。

    载波相位法静态绝对定位

    精度高于伪距法静态绝对定位。
    定位中应加入电离层、对流层等各项改正,防止和修复周跳,以提高精度。
    整周未知数结算后,不在为整数,可将解算出的观测站坐标称为固定解,否则为实数解。
    载波相位静态绝对定位结算的结果可以为相对定位的参考站。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    GPS静态绝对定位的精度,由两个因素确定:其中一个因素时单位权中误差σ0,它由码相关伪距测量的精度、卫星星历精度以及大气折射影响等许多因素确定;另一个因素是位置参数的协因数阵,它由卫星的空间几何分布确定。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    单点定位的误差源及应对方法

    卫星星历:精密星历
    卫星钟差:精密钟差、地面跟踪
    电离层延迟:双频改正
    对流层延迟:模型改正
    相对论效应改正
    卫星姿态影响:卫星天线相位中心改正、相位缠绕(GPS卫星发射右旋极化的无线电波)
    同观测站有关改正:地球固体潮汐、打样负荷潮汐、地球自转参数改正
    天顶对流层参数估计
    高采样率的卫星钟差
    模型、改正和解算策略同IGS的兼容性

    精密单点定位

    精密单点定位
    在这里插入图片描述
    传统GPS单点定位利用伪距观测值以及官博星历所提供的卫星轨道参数和卫星钟改正数进行计算。
    在这里插入图片描述
    载波相位绝对定位较伪距单点定位的精度高,但由于涉及到整周未知数的求解问题,一般很难达到实时性求解,且卫星的星历误差、卫星钟差等主要误差仍然存在,其定位精度依然较低。
    精密单点定位是利用全球若干IGS跟踪站数据计算出卫星的精密轨道参数和卫星钟差,再对单台接收机采集的相位和伪距观测值进行非差定位处理。
    精密单点定位由如下关键之处:
    1.在定位过程中需同时采用相位和伪距观测值;
    2.卫星轨道精度需达到cm级水平;
    3.卫星钟差改正精度需达到ns量级;
    4.需考虑更精确的其他误差改正模型。

    静态相对定位

    定义:确定进行同步冠词的接收机之间相对位置的定位方法,称为相对定位。
    差分观测值的定义:将相同频率的GPS载波相位观测值依据某种方式求差所获得的新的组合观测值
    定位结果:
    在这里插入图片描述

    差分GPS定位原理—伪距差分定位原理

    在这里插入图片描述
    差分GPS基本原理:
    对于相距不远的测站观测同一颗卫星,两个站观测值的误差存在着时空相关性。
    在一定时间内,同一卫星相邻历元观测量中的误差及影响大体相同
    根据基准站的已知坐标和所测卫星的已知瞬间位置,就可以计算出差分改正信息,以该值作为修正值传输给流动站的用户。
    流动站根据修正值来改正同步观测的相应观测量,进而计算流动站的瞬间位置,以达到提高精度的目的。
    差分GPS的方法
    1。位置差分
    在这里插入图片描述
    在这里插入图片描述
    优点:传输数据少,设备便于安装
    缺点:基准站、流动站需同步观测相同的卫星

    2.伪距差分
    在这里插入图片描述
    在这里插入图片描述
    优点:基准站、流动站无需必须观测相同的卫星;可选星,改善空间几何分布,提高精度。
    局限:误差抵消的程度取决于基准站于流动站的距离;随着基准站与流动站的距离增加,出现系统误差。

    局域差分GNSS
    1.但基准站局域差分
    在这里插入图片描述
    优点:结构、模型简单
    缺点:差分范围小,精度随基准站距离的增加而下降,可靠性低

    2.多基准站局域差分
    在这里插入图片描述
    优点:差分精度高,可靠性高,差分范围增大
    缺点:差分范围仍然有限,模型不完整

    广域差分GPS
    1.广域差分GNSS
    在这里插入图片描述
    在这里插入图片描述
    优点:差分精度高、差分精度与距离无关、差分范围大
    缺点:系统结构复杂、建设费用高

    2.广域增强差分GNSS
    在这里插入图片描述

    载波相位差分GPS定位原理

    基本思想:在基准站上安置一台GPS接收机,对卫星进行连续观测,并通过无线电传输设备实时地将观测数据及站坐标信息传送给用户站;用户站一方面通过接收机接收GPS卫星信号,同时还通过无线电接收设备接收基准站传送的观测数据,然后根据相对定位原理,实时地进行处理数据,并实时地以厘米级的精度给出用户站的三维坐标。
    修正法
    基准站将载波相位的修正量发送给用户站,以对用户站的载波相位进行改正实现定位。
    求差法
    求差法就是将基准站观测的载波相位观测值实时地发送给用户观测站,在用户站对载波相位观测值求差,获得诸如静态相对定位的单差、双差、三差求解模型,并采用与静态相对定位类似的求解方法进行求解。
    载波相位差分的关键技术ー一求起始相位模糊度
    RTK的应用于海上精密定位,地形测图和地籍测绘
    RTK缺点:
    RTK技术也同样受到基准站至用户距离的限制,为解决此问题,发展成局部区域差分和广域差分技术。通常把一般差分定位系统叫做DGPS,局部区域差分定位系统叫做 ADGPS,广域差分系统叫做 WADGPS.
    关键技术是高波特率数据传输的可靠性和抗干扰性
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 网络基本原理

    千次阅读 2020-06-27 22:53:36
    网络基本原理 一、路由 路由:路由是指导IP报文发送的路径信息。也可以理解为路由是寻找路径的过程。 路由器:路由器具有路由的功能,作用是数据包转发。 二、VPN 1. VPN(虚拟专用网络)简单地说就是利用公网架设...

                                                                                            网络基本原理

    一、路由

       路由:路由是指导IP报文发送的路径信息。也可以理解为路由是寻找路径的过程。

       路由器:路由器具有路由的功能,作用是数据包转发。

    二、VPN

    1. VPN(虚拟专用网络)简单地说就是利用公网架设专用网络,VPN属于远程访问技术。

       比如我们要访问外国的某个网站,就可以利用虚拟专用网络(VPN)进行访问,也称之为“翻墙”。

    2.我们可以把中国看作成一个巨大的局域网,想要访问到国外的网站就要翻墙。

    3.VSP:VSP是虚拟服务器,用户可以对VSP发起攻击,也可以在VSP上建立VPN。

    三、互联网(Internet)

       局域网用过运营商连接在一起形成互联网。

    四、防火墙

    1.   防火墙是系统的第一道防线,其作用是防止非法用户的进入,防火墙是位于内网和外网之间的屏障,它按照系统管理员预先           定义好的规则来控制数据包的进出。

    2.防火墙的种类

    • 网络层防火墙
    • 应用层防火墙
    • 数据库防火墙

    五、局域网与广域网

    1.局域网常用设备:HUB、交换机、路由器。

    2.局域网的特点:距离短,延迟小,传输速率高,传输可靠。

    3.广域网常用设备:Modern,路由器,广域网交换机,接入服务器。

       外网常用光纤来传递信号(光纤通过光信号传播,光纤不可折)

    六、网络世界的规则

       网络世界中存在着一个标准协议

    1.标准:数据通信标准分为两类 (事实和法定标准)

    • 事实标准:未经组织团体承认但已在应用中被广泛使用和接受的就是事实标准。
    • 法定标准:由官方认可的团体制定的标准被称为法定标准。

    七、OSI参考模型

    1.OSI RM:开放系统互连参考模型

    2.OSI的优点:

    • 简化了相类似的网络操作
    • 提供设备间的兼容性和标准接口
    • 促进标准化工作
    • 结构上可以分隔
    • 易于实现和维护

    3.OSI分层

    4.OSI七层的作用

    八、IP地址(网络协议地址)

    (在之前的文章中有讲到对ip地址的解释)

    1.IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节) 

        IP地址通常用点分十进制表示成(a.b.c.d)的形式,其中a,b,c,d都是0-255之间的十进制整数。

    例如:点分十进制ip地址(100.4.5.6)实际上是32位的二进制数

                (01100100.00000100.00000101.00000110)

    2.IP地址在网络层唯一标识一台网络设备

       ip地址包含两部分:

    •   网络位
    •   主机位

        网络位不可变,主机位可变

    3.IP地址的分类

        IP地址分为A类地址,B类地址和C类地址

    九、交换机

    1.交换机(Switch)意为“开关”,是一种用于电(光)信号转发的网络设备,它可以为接入交换机的任意两个网络节点提供独享的电信号通路。最常见的交换机是以太网交换机,其他常见的还有电话语音交换机,光纤交换机等。

    2.交换机的工作原理:通过ARP协议,ARP协议只访问本地地址或MAC地址。

     

     

    展开全文
  • 数据库基本原理

    千次阅读 2019-05-09 19:58:14
    数据库基本原理我对DB的理解1、数据库的组成:存储+实例不必多说,数据当然需要存储;存储了还不够,显然需要提供程序对存储的操作进行封装,对外提供增删改查的API,即实例。一个存储,可以对应多个实例,这将提高...
    前言

    今天我将站在程序员的角度以MySQL为例探索数据库的奥秘!

    数据库基本原理

    我对DB的理解

    1、数据库的组成:存储+实例

    不必多说,数据当然需要存储;存储了还不够,显然需要提供程序对存储的操作进行封装,对外提供增删改查的API,即实例。

    一个存储,可以对应多个实例,这将提高这个存储的负载能力以及高可用;多个存储可以分布在不同的机房、地域,将实现容灾。

    2、按Block or Page读取数据

    用大腿想也知道,数据库不可能按行读取数据(Why?^_^)。实质上,数据库,如Oracle/MySQL,都是基于固定大小(比如16K)的物理块(BlockorPage,我这里就不区分统一称为Block)来实现调度和管理的。要知道Block是数据库的概念,如何对应到文件系统呢?显然需要指出“这个Block的地址在哪里”,当查找到地址后,读取固定大小的数据就相当于完成了Block的读取了。

    数据库很聪明的,它不会仅仅只读取需要读取的Block,它还会替我们把附近的Block块都读取加载至内存。实际上,这是为了减少IO次数,提高命中率。事实上,一个Block块的附近Block也是热点数据,这种处理方式很有必要!

    3、磁盘IO是数据库的性能瓶颈

    毫无疑问,数据在磁盘上,少不了磁盘IO。什么磁头旋转,定位磁道,寻址的过程,就不说了,我们是程序员,也管不了这些。但是这个过程确实是非常耗时的,和内存读取不是一个数量级,所以后来出现了很多方式来减少IO,提升数据库性能。

    比如,增加内存,让数据库把数据更多的加载至内存。内存虽好,但也不能滥用,为什么这么说呢?假设数据库中有100G数据,如果都加载至内存,也就说数据库要管理100G磁盘数据+100G内存数据,你说累不累?(数据库要处理磁盘和内存的映射关系,数据的同步,还要对内存数据进行清理,如果涉及数据库事务,又是一系列复杂操作......)不过这里需要指出的是,为了加快内存查找速度,数据库一般对内存进行HASH存放。

    比如,利用索引,索引相比内存,是一个性价比非常高的东西,后文详细介绍MySQL的索引原理。

    比如,利用性能更好的磁盘...(和咱们就没关系呢)

    4、提出一些问题思考下:

    为什么我们说利用delete删除一个表的数据较trancate一个表要慢?

    【一个按行查找删除,多费劲;一个基于Block的体系结构删除】

    为什么我们说要小表驱动大表?

    【小表驱动大表会快?什么鬼?M*N和N*M不是一样的么?有鬼的地方,就有索引!】

    探索MySQL索引背后的原理

    对于绝大数的应用系统,读写比例在10:1,甚至100:1,而且insert/update很难出现性能问题,遇到最多的,最棘手的就是select了,select优化是重中之重,显然少不了索引!

    说起MySQL的索引,我们会冒出很多这些东西:BTree索引/B+Tree索引/Hash索引/聚集索引/非聚集索引...这么多,晕头!

    索引到底是什么,想解决什么问题?

    老生常谈了,官网说MySQL索引是一种数据结构,索引的目的就是为了提高查询效率。

    说白了,不使用索引的话,磁盘IO次数比较多!要想减少磁盘IO次数,怎么办?

    我们想通过不断缩小想要获取的数据的范围来筛选出最终想要的结果,把每次查找数据的磁盘IO次数控制在一个很小的数量级,最好是常数数量级。

    为了应对上述问题,B+Tree索引出来了!

    Hello,B+Tree

    在MySQL中,不同存储引擎对索引的实现方式是不同的,这里将重点分析MyISAM和Innodb。

    MyISAM引擎的B+Tree索引结构

    我们知道对于MyISAM引擎而言,数据文件和索引文件是分离的。从图中也可以看出,通过索引查找到后,就得到了数据的物理地址,然后根据地址定位数据文件中的记录即可。这种方式也叫"非聚集索引"。

    而对于Innodb引擎而言,数据文件本身是索引文件!通俗点说,叶子节点上,MyISAM存储的是记录的物理地址,而Innodb上存储的是数据内容,这种方式即"聚集索引"。

    另外一点需要注意的是,对于Innodb而言,主键索引中叶子节点存储的是数据内容,而普通索引的叶子节点中存储的是主键值!也就是说,对于Innodb的普通索引字段查找,先通过普通索引的B+Tree查找到主键后,然后通过主键索引的B+Tree进行查找。从这里你可以看出,对于Innodb而言,主键的建立非常重要!

    而对于MyISAM而言,主键索引和普通索引仅仅的区别在于主键只需要查找到一条记录即可停止,而普通索引允许重复,找到一条记录后需要继续查找,在结构上没有区别,如上图所示。

    深入B+Tree

    提几个问题:

    ①.为什么B+Tree把真实的数据放到叶子节点,而不是内层节点?

    ②.为什么我们说索引字段要尽可能短,最好是单调递增的?

    ③.为什么复合索引存在最左匹配原则?

    ④.范围查询(>,<,between,like)对最左匹配有什么影响?

    关于B+Tree的一些数学理论,咱们就不玩了,至少一点可以肯定的是:数据表的数据量N=F(树的高度h,每个Block存储的索引的个数m)。在N一定的情况下,索引字段越小,那么m会越大,这意味着h将越小!树越低,当然查找的更快!

    如果内层节点存放真实的数据,显然m会变小,树将变高。

    在实际应用中,我们应该尽可能采用单调递增的字段作为主键,一方面不会使得索引的数据结构变大,减小了索引占用的空间;另一方面也不会频繁的分裂B+Tree,使得效率下降。

    比如复合索引(name,age,sex),B+Tree会优先比较name来确定下一步的搜索方向。如果突然来了个(age,sex),根本上就无从下手。这也是符合常理的,对于一本书,我们说“找到第几章第几节的XXX”,从没有听说过“找到第几节的XXX”!这是复合索引的重要特性,即最左匹配特性。

    假设存在复合索引(name,age,sex),我们在进行select的时候,并没有按照这个顺序进行,而是sex='man'andname='zfz'andage=27,是否会使用索引呢?数据库是很聪明的,在SQL优化的时候,会自动帮助我们调整!但是如果缺失了复合索引的第一列,数据库也将无能为力呢。

    对于最左匹配,MySQL会一直向右匹配直到遇到范围查询就停止匹配。什么意思?比如复合索引(name,age,sex),对于name='zhangfengzhe'andage>26andsex='man',实际上只利用到了复合索引的name列。

    想利用索引,就得“干净”

    什么叫“干净”?就是不要让索引参与计算!比如在索引上应用函数,很可能导致索引失效。为什么呢?

    其实不用想,B+Tree上存储的是数据,要比较的话,需要把所有的数据都应用上函数,显然成本太大。

    想建立索引,看看区分度

    索引虽然物美价廉,但是也别乱来。count(distinctcol)/count(*)可以算一下col的区分度,显然对于主键而言,就是1。区分度太低的话,可以考虑下,是否还有必要建立索引呢?

    Hash索引

    这里并不是要深入分析Hash索引,而是要说明一下Hash的思想真是无处不在!

    在MySQL的Memory存储引擎中,存在hash函数,给一个key,通过hash函数进行计算得到地址,所以通常情况下,hash索引查找,会非常快,O(1)的速度。但是也存在hash冲突,和HashMap一样,通过单链表的形式解决。

    思考下,hash索引是否支持范围查询呢?

    显然是不支持的,它只能给一个KEY去查找。就如同HashMap一样,查找key包含"zhangfengzhe"的,会很快么?

    SQL优化神器:explain

    SQL优化的场景很多,网上的技巧也很多,完全记不住!

    要想彻底解决这个问题,我想只有把索引背后的数据结构和原理做适当的理解,遇到书写SQL或者SQL慢查询的时候,我们有基础去分析,再利用好explain工具去验证,就应该问题不大呢。

    explain查询的结果,可以告诉你哪些索引正在被使用,表是如何被扫描的等等。这里我将演示个Demo。

    数据表student:

    注意复合索引(age,address)

    符合最左前缀匹配

    复合索引失效

    OK,到这里,准备结束了,查询容易,优化不易,且写且珍惜!

    扩展阅读

    一个不可思议的MySQL慢查分析与解决

    MySQL大数据量分页查询方法及其优化

    MySQL性能优化:索引和查询优化

    深入理解synchronized关键字

    深入了解Java之虚拟机内存

    Redis为何这么快--数据存储角度

    来源:https://www.jianshu.com/p/aa1f0f29b4f8

    展开全文
  • JAVA-线程池的基本原理

    万次阅读 多人点赞 2019-10-11 20:54:51
    说起线程池大家肯定不会陌生,在面试中属于必问的问题之一,特别是对于高并发有较高要求的企业,基本是核心打分点。网上关于线程池的文章和视频很多,本篇文章旨在帮助大家快速了解和掌握线程池的原理,对于高级应用...

    前言

           说起线程池大家肯定不会陌生,在面试中属于必问的问题之一,特别是对于“高并发”有较高要求的企业,基本是必问点。网上关于线程池的文章和视频很多,本篇文章旨在帮助大家快速了解和掌握线程池的基本原理,对于高级应用不过多涉及。



    目录

    1. 并发队列
    2. 线程池简介
    3. 为什么需要线程池
    4. 线程池原理
    5. 线程池的分类



    一、并发队列

    1. 并发队列概念

           并发队列是一个基于链接节点的无界线程安全队列,它采用先进先出的规则对节点进行排序,当我们添加一个元素的时候,它会添加到队列的尾部,当我们获取一个元素时,它会返回队列头部的元素。

    2. 并发队列分类

           并发队列分为阻塞队列和非阻塞队列,下面举例示意:
           现有一个长度为10的队列,有11个元素需要放进去
    Alt
                                                  示意图

    两种队列区别
    1. 入队时
      非阻塞队列:当向队列中放入10个元素,此时队列已满,再放入第11个元素数据就会丢失。

      阻塞队列:当队列已满了的时候,此时会进行等待,什么时候队列中有出队的元素,那么第11个再放进去。

    2. 出队时
      非阻塞队列:如果队列中没有元素了,此时进行出队操作,往外取元素,得到的就是null。

      阻塞队列:当队列中没有元素时,如果此时进行出队操作会等待,什么时候放进去,什么时候再取出来。

           特别地,线程池就是基于阻塞队列实现的。



    二、线程池简介


           线程池是一种多线程处理形式,处理过程中将任务添加到队列,线程池在系统启动时即创建大量空闲的线程,程序将一个任务传给线程池,线程池就会启动一条线程来执行这个任务。执行结束以后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个任务。


           简单来说,线程池就是线程的集合。




    三、为什么需要线程池


    线程的正常生命周期如下图所示:
    在这里插入图片描述       为了便于分析,假设各阶段所花时间如上所示(当然线程各阶段实际所花时间极短,为毫秒级)。如果我们能省略其他阶段,每次线程直接运行任务,这样就可以单个线程处理任务就可以节省5秒。要实现这样的设想,我们可以使用线程池来处理,因为线程池中的线程是事先创建好的大量空闲线程,当队列中的任务进入线程池中,线程可以直接执行任务,执行完成后释放资源,继续处理下一任务。
           举例来看:现有100个任务需要处理,一次最多创建10个线程。如果采用普通方式,一次创建10个线程处理10个任务,总共需60秒,而采用线程池的方式,一次执行10个任务,总共需要10秒。
           综上所述:我们可以很明显的看出线程池在处理任务量极大的高并发系统中,具有很大的优势。



    四、线程池的原理


    1. ThreadPoolExecutor核心类

           线程池的最上层接口是Executor,这个接口定义了一个核心方法execute(Runnablecommand),这个方法是用来传入任务的,最后被ThreadPoolExecutor类实现。而且ThreadPoolExecutor是线程池的核心类,此类的构造方法如下:


    public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue);
    
    public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory);
     
    public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnitunit,BlockingQueue<Runnable>workQueue,RejectedExecutionHandler handler);
     
    public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler);
    


    各个参数表示意义:

    参数名参数含义
    corePoolSize核心线程池大小,也即核心线程的数量
    maximumPoolSize最大线程池大小,也即线程的最大数量
    keepAliveTime空闲时间,是除核心线程之外的新创建线程的最大存活时间
    TimeUnit时间单位
    workQueue阻塞队列,用来存储等待的任务
    threadFactory线程工厂,用来创建新线程
    handler拒绝处理策略,当提交给线程池的任务量超过最大线程池大小+队列长度,就会采取拒绝处理策略

    特别地说明:
    workQueue一般有以下三种阻塞队列:
    SynchronousQueue:直接提交,默认使用队列
    ArrayBlockingQueue:有界队列
    LinkedBlockingQueue:无界队列

    threadFactory是当队列已满,但线程总数量<最大线程池大小时,线程池中用来创建新线程的线程工厂。一般有下列三种类型:
    ArrayBlockingQueue:有界线程安全的阻塞队列。
    LinkedBlockingQueue:并发安全的阻塞队列。
    SynchronousQueue:同步队列。

    handler触发时,有以下四种拒绝处理策略:
    hreadPoolExecutor.AbortPolicy(默认):丢弃任务并抛出RejectedExecutionException异常。
    ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。
    ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)
    ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务



    2.线程池原理图

    在这里插入图片描述

    3. 线程池实例

           接下来就通过一个简单的实例并结合原理图来了解线程池的基本原理:


    public class test02 {
        public static void main(String[] args) {
            ThreadPoolExecutor pool =
            new ThreadPoolExecutor(1,2,3, TimeUnit.SECONDS, new LinkedBlockingDeque<>(3));
            //利用线程池中的线程开始执行任务
            //执行第一个任务
            pool.execute(new TestThread());
            
            //队列有三个任务等待
            pool.execute(new TestThread());
            pool.execute(new TestThread());
            pool.execute(new TestThread());
            
            //执行第五个任务
            pool.execute(new TestThread());
            //执行第六个任务,拒绝任务报错
            //pool.execute(new TestThread());
            //当前线程池中有2个线程:1个核心线程 + 1个新创建的线程 = 最大线程数
    
            //关闭线程池
            pool.shutdown();
        }
    }
    
    class TestThread implements Runnable{
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName());
        }
    }
    


           首先创建一个最简单类型的线程池,构造方法只有五个参数,每个参数意义如下:
    1:核心线程数
    2:最大线程数
    3:空闲时间。新创建的线程执行任务后等待新任务的空闲时间
    TimeUnit.SECONDS:时间单位,秒
    new LinkedBlockingDeque:阻塞队列,长度为3





    不执行第6条任务时的执行结果如下:

    在这里插入图片描述


    执行第6条任务时执行结果如下:
    在这里插入图片描述

    分析代码执行过程:

    在这里插入图片描述
           现有一线程池,里面只有一个核心线程thread1,第一个任务进入线程池中,由thread1执行,而2-4号线程处在队列中等待执行,当5号任务提交时,根据原理图,此时满足队列已满,且核+新<=最大,所以创建新线程thread2,由thread1和thread2分摊执行任务,由运行结果也可以看出,确实是分摊任务

           当加上第6条的任务时,根据原理图,此时队列已满,且核+新>最大,没有多余的线程执行任务,队列也无法装入,就会报错,拒绝任务。



    五、线程池的分类


    线程池可分为以下四类:


    1. 可缓存:newCachedThreadPool
    • 作用:创建一个根据需要创建新线程池的线程池。当旧线程释放资源后就可以使用旧线程。

    • 特点:线程数灵活最大值为INTER.MAX_VALUE,底层采用一个近似无边界队列

    2. 定长:newFixedThreadPool
    • 作用:创建一个可重用固定线程数的线程池,以共享的无界队列来运行这些线程。

    • 特点:线程处于一定量,可以很好的控制并发量

    3. 定时:newScheduleThreadPool
    • 作用:创建一个可延迟或延期运行的线程池。

    • 特点:线程池中具有指定数量的线程,可定时或延迟执行,适用于周期性执行任务的场景。

    4. 单例:newSingleThreadExecutor
    • 作用:创建一个只有一个线程的线程池。且线程的存货时间是无限的,当该线程正繁忙时,对于新任务会进入无界的阻塞队列中。
    • 特点:适用于一个一个任务执行的场景。


    版权声明:

    1.本博客为原创的文章,版权归原作者 我在风花雪月里等你 所有;

    2.未经原作者允许不得转载本文内容,否则将视为侵权;

    3.转载或者引用本文内容请注明来源及原作者;

    4.对于不遵守此声明或者其他违法使用本文内容者,本人依法保留追究权等。


    在这里插入图片描述

    展开全文
  • 网络基本原理

    千次阅读 2020-06-27 22:28:48
    网络的基本原理 1、网络的主要目的: 计算机之间进行数据交换。 2、局域网LAN (1)交换机(switch)、路由器(Router) 路由器是连接因特网中各局域网、广域网的设备。 交换机也叫交换式集线器,是一种工作在OSI第二层...
  • 手眼标定之基本原理

    万次阅读 多人点赞 2020-02-19 15:05:44
    文章目录一 前言二 Eye-in-Hand2.1 基础知识准备2.2 Eye-in-Hand基本原理三 跋 原文首发于微信公众号【视觉IMAX】。 一 前言 机器人的视觉系统分为固定场景视觉系统和运动的「手-眼」视觉系统。摄像机与机器人的...
  • HTTP基本原理

    万次阅读 多人点赞 2018-02-12 15:11:22
    了解了这些内容,有助于我们进一步了解爬虫的基本原理。1. URI和URL这里我们先了解一下URI和URL,URI的全称为Uniform Resource Identifier,即统一资源标志符,URL的全称为Universal Resource Locator,即统一资源...
  • 软件工程的7条基本原理

    千次阅读 2019-05-20 11:46:19
    软件工程的7条基本原理 1.用分阶段的生命周期计划严格管理 把软件生命周期划分成若干个阶段,并相应地指定出切实可行的计划,然后严格按照计划对软件的开发与维护工作进行管理。 不同层次的管理人员都必须严格按照...
  • SVM基本原理

    千次阅读 2020-03-26 21:54:41
    1.SVM原理 SVM 是一种二类分类模型。它的基本模型是在特征空间中寻找间隔最大化的分离超平面的线性分类器。 •当训练样本线性可分时,通过硬间隔最大化,学习一个线性分类器,即线性可分支持向量机; •当训练...
  • 图像处理基本原理

    千次阅读 2020-03-23 17:50:35
    图像分割技术基本原理 1.1 图像滤波 由于影像采集设备的工作原理以及设备制造技术的限制,在图像采集的过程中在图像中产生噪声是不可避免的;此外,使用者的操作水平也会对图像的质量造成影响,这些因素都导致最终的...
  • STP协议基本原理

    千次阅读 2018-12-17 17:04:18
    一,STP协议基本原理 以太网交换网络中为了进行链路备份,提高网络可靠性,通常会使用冗余链路。但是使用冗余链路会在交换网络上产生环路,引发广播风暴以及MAC地址表不稳定等故障现象,从而导致用户通信质量较差,甚至...
  • SPWM基本原理详解(图文并茂+公式推导+C程序实现)

    万次阅读 多人点赞 2020-12-09 08:29:20
    基本原理 SPWM的全称是(Sinusoidal PWM),正弦脉冲宽度调制是一种非常成熟,使用非常广泛的技术; 之前在PWM的文章中介绍过,基本原理就是面积等效原理,即冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其...
  • AD转换基本原理

    万次阅读 多人点赞 2021-03-31 14:27:34
    一、AD的基本概念 AD转换是将时间连续和幅值连续的模拟量转换为时间离散、幅值也离散的数字量。使输出的数字量与输入的模拟量成正比。 AD转换的过程有四个阶段,即采样、保持、量化和编码。 采样是将连续时间信号...
  • STM32基本原理

    千次阅读 2020-04-06 14:18:47
    STM32基本原理 一、简介 1、意法半导体公司 (1)ST (2)生产ARM Cortex-M核心 2、STM32 SOC命名规则 (1)STM32F103VET6 (2)STM32:产品系列名 F:产品型号,F表示Flash产品,目前没有其他选项 103:产品子系列...
  • 计算机网络基本原理

    千次阅读 2020-03-31 23:04:04
    一、
  • Spring框架的基本原理分析

    万次阅读 多人点赞 2018-04-05 14:47:07
    工作有一段时间了,工作中基本每个项目都用到了Spring框架,说实话,很多人应该和我一样,只是“使用”了这个框架,对于框架的基本原理应该没怎么研究过。前段时间,和同事交流时,提到了Spring核心组件:IOC(控制...
  • 遗传算法(一) 遗传算法的基本原理

    千次阅读 多人点赞 2020-02-03 22:25:13
    遗传算法(一)遗传算法的基本原理 1.概述 遗传算法(Genetic Algorithm, GA)起源于对生物系统所进行的计算机模拟研究。它是模仿自然界生物进化机制发展起来的随机全局搜索和优化方法,借鉴了达尔文的进化论和...
  • 30分钟理解决策树的基本原理

    千次阅读 2019-08-15 18:13:57
    下面从假设空间,目标函数,优化算法3方面阐述决策树算法的基本原理。   假设空间即我们对模型形式的先验假设,最终我们求得的模型必定符合我们对模型形式的先验假设。 决策树模型的先验形式可以表述成如下...
  • K-means算法的基本原理

    千次阅读 2020-06-06 11:08:49
    K-means算法的基本原理 K-means算法的概念 K-means算法是一种典型的基于划分的聚类算法,该算法具有运算速度快,执行过程简单的优点,在很多大数据处理领域得到了广泛的应用。 K-means算法的思想 利用相似性度量方法...
  • 逻辑门与ALU基本原理

    千次阅读 2020-01-28 17:16:03
    逻辑门与ALU基本原理一、布尔逻辑和逻辑门二、ALU基本原理2.1 算术单元:半加器2.2 算术单元:全加器2.3 算术单元:8位加法器2.4 逻辑单元2.5 ALU三、参考资料 一、布尔逻辑和逻辑门 晶体管计算机采用开/关,两种...
  • 公钥密码学的基本原理

    千次阅读 2018-07-11 08:53:36
    公钥密码学的基本原理 基本概念问题 公钥密码学与传统密码学的区别 公钥算法是基于数学函数;传统密码学算法是基于代替和置换 公钥密码是非对称的,它使用两个独立的密钥;传统密码学使用一个密钥 任何加密...
  • 任何科学都是由包含基本原理的知识组成的。任何科学的基本原理都是这门科学赖以建立的最基础的事实,在此基础上才能衍生出其他的各项活动。逻辑学,作为一门科学,同样有它的基本原理。但是,逻辑学的特别之处在于,...
  • 软件工程概述和基本原理

    千次阅读 2019-06-17 09:11:37
    概述: 软件工程是指导计算机软件...基本原理: 1.用分阶段生命周期计划严格要求。 2.坚持进行阶段评审。 3.实行严格的产品控制。 4.采用现代程序设计技术。 5.结果应能清楚地审查。 6.开发小组的成员应该少而精。 ...
  • 软件测试基本原理

    千次阅读 2019-03-25 21:47:18
    在测试中,应当始终牢记7条基本原理。 原理1:测试可以证明缺陷存在,但不能证明缺陷不存在。 测试可以证明产品是失败的,也就是说产品中有缺陷。但测试不能证明程序中没有缺陷。适当的测试可以减少测试对象中...
  • 电路初级基本原理总结

    千次阅读 2017-02-05 19:32:28
    电路初级基本原理总结
  • FIFO的基本原理

    千次阅读 2020-09-15 15:29:34
    2.FIFO原理 根据FIFO工作的时钟域分为同步/异步FIFO。同步FIFO是指读时钟和写时钟为同一个时钟在时钟沿来临时同时发生读写。异步FIFO读写时钟不一致,读写相互独立。 异步FIFO最核心的部分就是精确产生空满标志位,...
  • CDN概念和基本原理

    千次阅读 2019-05-28 16:45:46
    1. 什么是CDN? CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的...CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服...
  • 双目测距的基本原理

    万次阅读 2019-08-25 19:29:55
    单目测距原理: 先通过图像匹配进行目标识别(各种车型、行人、物体等),再通过目标在图像中的大小去估算目标距离。这就要求在估算距离之前首先对目标进行准确识别,是汽车还是行人,是货车、SUV还是小轿车。准确...
  • IPSec基本原理

    万次阅读 多人点赞 2019-08-31 20:40:32
    IKEv1协议详解 IKEv1协议参考:IKEv1协议详解 IKEv2协议详解 IKEv2协议参考:IKEv2协议详解 IPSec各种场景配置示例 IPSec各场景配置示例 数字证书PKI原理 数字证书PKI原理 IPSec的NAT穿越 IPSec 虚拟专用网的NAT...
  • SSM基本原理

    千次阅读 2018-05-18 22:24:16
    是标准的MVC模式,将整个系统划分为四层:View层,Controller层,Service层,Dao层Spring MVC主要负责请求的转发和视图管理Spring运用IOC和AOP思想实现业务对象管理Mybatis封装JDBC作为数据对象的持久化引擎原理:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,454,421
精华内容 581,768
关键字:

基本原理