b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

基于hash表的索引结构设计与实现_网络编程与分层协议设计:基于linux平台实现_基于c#房屋租赁管理系统的设计

电脑杂谈  发布时间:2019-06-20 10:04:51  来源:网络整理

基于c#房屋租赁管理系统的设计和实现_网络编程与分层协议设计:基于linux平台实现_基于hash表的索引结构设计与实现

image.png

本文节选自深入浅出分布式基础架构-篇 https://url.wx-coder.cn/kl3ms。

/*********name:locate_valueinput_param:链表的地址llist,要找的数据value的索引output:return:所找数据所在的指针function:查找数据为value**********/pnode locate_value(linklist llist, int l_index)。}/*********name:locate_valueinput_param:链表的地址llist,要找的数据value的索引output:return:所找数据所在的指针function:查找数据为value**********/pnode locate_value(linklistllist, intl_index){pnode p = null。从图4.2可以看出,从大的方面,可以将.sst文件划分为数据存储区和数据管理区,数据存储区存放实际的key:value数据,数据管理区则提供一些索引指针等管理数据,目的是更快速便捷的查找相应的记录。

左侧为数据记录的物理地址,右侧为查找树,需要注意的是,逻辑上相邻的记录在磁盘上也并不是一定物理相邻的。实际的应用中我们往往使用 B+ 树或者 LSM 来替代二叉查找树或者红黑树来构建索引系统,并且充分利用 虚拟存储管理 https://url.wx-coder.cn/PeNqS 一节中介绍过的局部性原理、磁盘预读与页缓存等概念。

值得一提的是,本节并未涵盖搜索引擎中常用的与文本索引相关的技术,譬如倒排索引、TF-IDF 等,如果有兴趣可以参考本篇搜索引擎 https://url.wx-coder.cn/O07eI 一章。

本部分节选自深入浅出 Linux 操作系统 https://url.wx-coder.cn/Q0AmI 。

存储系统的层次结构 根据各种存储器的存储容量、存取速度和价格比的不同,将它们按照一定的体系结构组织起来,使所放的程序和数据按照一定的层次分布在各种存储器中。外存储器主要有磁盘存储器,速度相对内存慢的多,但是存取速度慢。而计算机的外存储器尽管存取速度较内存储器慢,但存储容量大,电源切断后数据可以继 续保存。

image

基于hash表的索引结构设计与实现_网络编程与分层协议设计:基于linux平台实现_基于c#房屋租赁管理系统的设计和实现

存储器层次结构的主要思想是一层上的存储器作为低一层存储器的高速缓存。因此,寄存器文件就是 L1 的高速缓存基于hash表的索引结构设计与实现,L1 是 L2 的高速缓存,L2 是 L3 的高速缓存,L3 是主存的高速缓存,而主存又是磁盘的高速缓存。在某些具有分布式文件系统的网络系统中,本地磁盘就是存储在其他系统中磁盘上的数据的高速缓存。

称存储字存储单元:存放一个存储字的若干个记忆单元组成一个存储单元存储体:大量存储单元的集合组成存储体存储单元地址:存储单元的编号字编址:对存储单元按字编址字节编址:对存储单元按字节编址寻址:由地址寻找数据。下面以位图文件的存储原理为例,由于存储原理不一样,256种颜色的bmp文件,调色板的索引映射为像素的颜色,还包括了文件长度和位图数据在文件中的起始位置,文件的这一部分的长度是一百万个字节,对图像文件的存储原理做一个说明,尺寸一样的相片、宽,一兆字节的位图数据,一个像素的值对应的是调色板的索引,存储为bmp格式和存储为jpg格式时。在计算机的组成结构中,有一个很重要的部分,就是存储器.存储器是用来存储程序和数据的部件,对于计算机来说,有了存储器,才有记忆功能,才能保证正常工作.存储器的种类很多,按其用途可分为主存储器和辅助存储器,主存储器又称内存储器(简称内存),辅助存储器又称外存储器(简称外存).外存通常是磁性介质或光盘,像硬盘,软盘,磁带,cd等,能长期保存信息,并且不依赖于电来保存信息,但是由机械部件带动,速度与cpu相比就显得慢的多.内存指的就是主板上的存储部件,是cpu直接与之沟通,并用其存储数据的部件,存放当前正在使用的(即执行中)的数据和程序,它的物理实质就是一组或多组具备数据输入输出和数据存储功能的集成电路,内存只用于暂时存放程序和数据,一旦关闭电源或发生断电,其中的程序和数据就会丢失.。

3143表3-1 存储器的用途和特点名称简称用途特点高速缓冲存储器cache高速存取指令和数据存取速度快但存储容量小主存储器主存存放计算机运行期间的大量程序和数据存放系统程序和大型数据文件及存取速度较快存储容量不大外存储器外存存储容量大位成本低1533.1.3 存储器的技术指标1. 存储容量:指它可存储的信息的字节数或比特数通常用存储字数单元数 存储字长每单元的比特数表示。当中央处理器存取主存储器时,硬件首先自动对存取地址的列号字段进行译码,以便将联想存储器该列的全部行号与存取主存储器地址的行号字段进行比较:若有相同的,表明要存取的主存储器单元已在高速存储器中,称为命中,硬件就将存取主存储器的地址映射为高速存储器的地址并执行存取操作。● 某32位计算机的cache容量为16kb,cache块的大小为16b.若主存与cache的地址映射采用直接映射,则主存地址为1234e8f8(十六进制),的单元装入的cache地址为__10 1000 1111 1000_____ (二进制)。

当系统需要读取主存时,则将地址信号放到地址总线上传给主存,主存读到地址信号后,解析信号并定位到指定存储单元,然后将此存储单元数据放到数据总线上,供其它部件读取。写主存的过程类似,系统将要写入单元地址和数据分别放在地址总线和数据总线上,主存读取两个总线的内容,做相应的写操作。这里可以看出,主存存取的时间仅与存取次数呈线性关系,因为不存在机械操作,两次存取的数据的“距离”不会对时间有任何影响,例如,先取 A0 再取 A1 和先取 A0 再取 D3 的时间消耗是一样的。

寄存器文件在层次结构中位于最顶部,也就是第 0 级或记为 L0。一个典型的寄存器文件只存储几百字节的信息,而主存里可存放几十亿字节。然而,处理器从寄存器文件中读数据的速度比从主存中读取几乎要快 100 倍。针对这种处理器与主存之间的差异,系统设计者采用了更小、更快的存储设备,即高速缓存存储器(简称高速缓存),作为暂时的集结区域,用来存放处理器近期可能会需要的信息。

image

1. 对静态资源的高速并发缓存和访问。上面介绍的基本都是常说的内存的方方面面,下面我们来认识一下高速缓冲存储器,即cache.我们知道,任何程序或数据要为cpu所使用,必须先放到主存储器(内存)中,即cpu只与主存交换数据,所以主存的速度在很大程度上决定了系统的运行速度.程序在运行期间,在一个较短的时间间隔内,由程序产生的地址往往集中在存储器的一个很小范围的地址空间内.指令地址本来就是连续分布的,再加上循环程序段和子程序段要多次重复执行,因此对这些地址中的内容的访问就自然的具有时间集中分布的倾向.数据分布的集中倾向不如程序这么明显,但对数组的存储和访问以及工作单元的选择可以使存储器地址相对地集中.这种对局部范围的存储器地址频繁访问,而对此范围内被访问的信息集合随时间的变化是很缓慢的,如果把在一段时间内一定地址范围被频繁访问的信息集合成批地从主的系统中,cpu访问数据时,在cache中能直接找到的概率,它是cache的一个重要指标,与cache的大小、替换算法、程序特性等因素有关.增加cache后,cpu访问主存的速度是可以预算的,64kb的cache可以缓冲4mb的主存,且命中率都在90%以上.以主频为100mhz的cpu(时钟周期约为10ns)、20ns的cache、70ns的ram、命中率为90%计算,cpu访问主存的周期为:有cache时,20×0.9+70×0.1=34ns。高并发访问的核心原则其实就一句话“把所有的用户访问请求都尽量往前推”. 如果把来访用户比作来犯的"敌人",我们一定要把他们挡在800里地以外,即不能让他们的请求一下打到我们的指挥部(指挥部就是及分布式存储). 如:能缓存在用户电脑本地的,就不要让他去访问cdn. 能缓存cdn服务器上的,就不要让cdn去访问源(静态服务器)了.。

在windows xp\\vista\\7系统下,点击“开始”,“运行”,输入“msinfo32”,点击“确定”,出现如下显示的界面,依次点击“组件(components)/存储(storage)/磁盘(disks)”,查看下图彩色方框显示的分区的地址数值。笔者觉得英特尔快速存储技术及其驱动用于组raid的用处比较大,您可因性能提高及耗电降低而获益,如果你米多可以直接拿固态硬盘替换,日立7200转320g的,我们打开英特尔快速存储技术软件将呈现下图中的样子,增加磁盘性能,笔者是单机械硬盘的,相应的ide驱动也被卸载了。由于存储介质的特性,磁盘本身存取就比主存慢很多,再加上机械运动耗费,磁盘的存取速度往往是主存的几百分分之一,因此为了提高效率,要尽量减少磁盘i/o。

基于hash表的索引结构设计与实现_网络编程与分层协议设计:基于linux平台实现_基于c#房屋租赁管理系统的设计和实现

通过这个硬盘的运作和磁头进行读写,磁头划的一个圈称为磁道,硬盘存取数据时是直接存取的,分为俩部分一是找到相应的磁道,然后是磁头开始读写。多磁头技术:通过在同一碟片上增加多个磁头同时的读或写来为硬盘提速,或同时在多碟片同时利用磁头来读或写来为磁盘提速,多用于服务器和中心。11)w_sectors/磁道/磁头/读缓冲区/开始扇区/扇区数/源文件 写表面。

磁盘上数据必须用一个三维地址唯一标示:柱面号、盘面号、块号 ( 磁道上的盘块 )。读 / 写磁盘上某一指定数据需要下面 3 个步骤: (1) 首先移动臂根据柱面号使磁头移动到所需要的柱面上,这一过程被称为定位或查找。 (2) 如上图 11.3 中所示的 6 盘组中,所有磁头都定位到了 10 个盘面的 10 条磁道上 ( 磁头都是双向的 )。这时根据盘面号来确定指定盘面上的磁道。 (3) 盘面确定以后,盘片开始旋转,将指定块号的磁道段移动至磁头下。经过上面三个步骤,指定数据的存储位置就被找到。这时就可以开始读 / 写操作了。访问某一具体信息,由 3 部分时间组成:

存数据时会将数据同时写入镜像盘内,读取数据则只从工作盘读出(电脑百事网pc841.com)。存数据时会将数据同时写入镜像盘内,读取数据则只从工作盘读出(脚本之家pc841.com)。主存暂时存放存储在容量较大的、慢速磁盘上的数据,而这些磁盘常常又作为存储在通过网络连接的其他机器的磁盘或磁带的数据的缓冲区。

image.png

哈希索引即是基于哈希技术,如上图所示,我们将一系列的最终的键值通过哈希函数转化为存储实际数据桶的地址数值。值本身存储的地址就是基于哈希函数的计算结果,而搜索的过程就是利用哈希函数从元数据中推导出桶的地址。

哈希索引会在进行相等性测试(等或者不等)时候具有非常高的性能,但是在进行比较查询、Order By 等更为复杂的场景下就无能为力。

当然,如果我们使用平衡二叉树的磁盘存储结构来进行查找,磁盘4次,最多5次,而且文件越多,b树比平衡二叉树所用的磁盘io操作次数将越少,效率也越高。由于b- 树通常存储在磁盘上, 则前一查找操作是在磁盘上进行的,而后一查找操作是在内存中进行的基于hash表的索引结构设计与实现, 即在磁盘上找到指针p 所指结点后, 先将结点中的信息读入内存, 然后再利用顺序查找或折半查找查询等于k 的关键字。所谓索引,即是快速定位与查找,那么索引的结构组织要尽量减少查找过程中磁盘i/o的存取次数(b+树相比b树,其非叶子节点占用更小的空间,可以有更多非叶子节点存放在再内存中,减少大量的io)。

根据 B-Tree 的定义,可知检索一次最多需要访问 h 个节点。系统的设计者巧妙利用了磁盘预读原理,将一个节点的大小设为等于一个页,这样每个节点只需要一次 I/O 就可以完全载入。每次新建节点时,直接申请一个页的空间,这样就保证一个节点物理上也存储在一个页里,加之计算机存储分配都是按页对齐的,就实现了一个节点只需一次 I/O。而检索的时候,一次检索最多需要 h-1 次 I/O(根节点常驻内存),其渐进复杂度为 $O(h)=O(log_dN)O(h)=O(log_dN)$,实际应用中,出度 d 是非常大的数字,通常超过 100,因此 h 非常小(通常不超过 3)。而红黑树这种结构,h 明显要深的多。由于逻辑上很近的节点(父子)物理上可能很远,无法利用局部性,所以红黑树的 I/O 渐进复杂度也为 O(h),效率明显比 B-Tree 差很多。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-107249-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...