精华内容
下载资源
问答
  • 无法再内存中计算的话,就必须搜索磁盘上的数据 但是磁盘十分缓慢,I/O十分耗费时间 内存和磁盘的速度差异--内存快10万-100万倍 为什么这么慢? 因为内存是电子产品,其搜索速度物料结构基本无关。而磁盘读取...

    以下内容转载自《大规模Web服务开发技术》

    大规模数据的难点在于无法在内存中计算,这是因为:

    无法再内存中计算的话,就必须搜索磁盘上的数据

    但是磁盘十分缓慢,I/O十分耗费时间


    内存和磁盘的速度差异--内存快10万-100万倍

    为什么这么慢?

    因为内存是电子产品,其搜索速度和物料结构基本无关。而磁盘读取数据需要磁头移动和盘片旋转两种物理移动。内存搜索一次要几微秒,而磁盘要花费几毫秒。


    传输速度和总线的速度差异

    接下来看看传输速度的差异吧。不论是内存还是磁盘,都用总线与CPU连接。不过这些总线也有速度差异啊,连接内存的和CPU的总线相当快,能达到7.5GB/秒。但磁盘只能达到58MB/秒。因此传输过程也要花费时间。数据量越大,磁盘和内存的速度差异就越明显,传输速度也是磁盘慢一些。



    展开全文
  • Zookeeper数据内存模型和磁盘存储

    千次阅读 2018-03-15 10:34:36
    一、内存结构 类似Unix的文件系统,Zookeeper在内存中维护着一个树形层级结构,只不过没有目录,每个节点被成为znode.znode可以存放数据,并有自己的访问权限列表关联的统计信息(stat). 然而Zookeeper是用来设计...

    一、内存结构

            类似Unix的文件系统,Zookeeper在内存中维护着一个树形层级结构,只不过没有目录,每个节点被成为znode.znode可以存放数据,并有自己的访问权限列表和关联的统计信息(stat). 

            然而Zookeeper是用来设计作为协同服务的,而不是用于大容量数据存储。虽然每个znode上的数据上限是1M.即便如此,我们还是不推荐开发人员按照这个上限来使用,因为客户端的写请求在服务端都是串行处理,数据的传输会大大影响性能。

            在内存中,DataTree维护着ZNode的树形结构,然而在处理来自于客户端的对目标节点的操作请求时,zk并非从根节点层层找到目标节点,而是通过另外一个hashtable通过全路径直接定位到目标节点。这样做的目的是为了提高查找效率,将复杂度从O(pathNodes)降低到O(1).

    1
    private  final  ConcurrentHashMap<String, DataNode> nodes =  new ConcurrentHashMap<String, DataNode>();


        在DataNode上除了其parent,data,acl,children等属性外,还保存了一些统计数据Stat:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    czxid   创建这个znode的zxid
    mzxid   最后一次修改这个znode的zxid
    ctime   该znode创建时间
    mtime   该znode最后一次修改的时间
    version     该znode的version,也就是该znode的修改次数。
    cversion    该znode的子节点的更新次数
    aversion    该znode的ACL信息更新次数
    ephemeralOwner  如果该znode是ephemeral node,此字段就是对应client的sessionId;否则为0。
    pzxid       create or delete childnode txn id


    二、磁盘存储

            ZK的数据存储在磁盘上分为快照和事务日志两种:


            1.对于客户端的写请求zk会将其写入到transaction log中

            2.如果事务日志达到一定数量,则产生一个新日志,并启动一个线程进行进行takeSnapshot,把当前的内存DataTree和会话信息写入到snapshot file中,snapshot的文件名以datatree的最后处理的transactionId为结尾

            3.ZK在启动的时候首先将snapshot从磁盘加载到内存的DataTree中,然后根据dataTree.lastProcessedZxid+1找到需要处理的transaction log记录,一一附加到datatree上。


            Zookeeper高效原因之一就是对请求的处理主要是操作内存结构. 然而对于每个写请求都需要写事务日志,为了提高append日志效率,zk使用了group commit机制,也就是并非每条日志都直接flush到磁盘上,而是等到多个请求产生的日志缓存起来,到达指定条数后,一次性flush到磁盘上。

            此外zk为了在运行过程中迅速地向事务日志文件中append记录,为每个txn log文件预先分配了指定大小的磁盘块(通过preAllocSize来设置),默认是64M,接近这个值的时候(少于4k)便会再次分配64M.这样做的原因是如果没有预先分配,那么写完一个块的话就要重新分配,会带来额外的磁盘寻道。


            preAllocSize默认是64M,但是我们可以根据snapCount(事务日志达到多少条便产生一个snapshot)的数量来预估事务日志文件的大小。这是因为每当达到snapCount对应的事务日志条数后,便会产生一个新日志(rollLog)。合理的预估有助于避免空间浪费。


            我们看一下快照文件的二进制结构:  snapshotStructure.jpg

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    由于图较小,无法将具体信息都放进去,我们看下ACL和DataNode的具体结构:
    Map<nodeAcl,List<ACL>>
    nodeAcl(long)
     
    ACL:
    scheme(string)
    identifier(string)
    permissions(int)
     
     
    Tree<DataNode> 从根节点开始开始遍历
     
    path(string)
    data(bytes)
    acl(long) access control list
    czxid(long) createNode txn id
    mzxid(long) setData txn id
    ctime(long) createNode time
    mtime(long) setData time
    version(int) increase when setData
    cversion(int) increase when delete or create childnode
    aversion(int) setAcl txn id
    ephemeralOwner(long) It is sessionId if ephemeral node,else 0
    pzxid(long) create or delete childnode txn id

            我们再看一下事务日志文件的二进制结构:transactionlogStructure.jpg




    http://www.mthinking.net/blog/tecnology/dailylearning/918bc3a1-e154-4175-82b5-cd539c67c55f




    展开全文
  • 磁盘 内存 读取数据原理

    千次阅读 2019-11-26 09:02:20
    当程序要读取的数据时传入内存地址...我们在程序中的数据处理主要是操作磁盘和内存,硬盘是磁盘里面最常用的一种.以前有所谓的软盘,也是磁盘的一种,原理硬盘是一样的.都是利用磁性物质的特性来保存信息.磁盘的原理...

    当程序要读取的数据时传入内存地址(行地址+列地址),如果数据不在主存中时,会触发一个缺页异常,此时系统会向磁盘发出读盘信号,通过柱面号,磁头号,扇区号定位磁盘位置,找到数据的起始位置并向后连续读取一页或几页载入内存中。

     


    我们在程序中的数据处理主要是操作磁盘和内存,硬盘是磁盘里面最常用的一种.以前有所谓的软盘,也是磁盘的一种,原理和硬盘是一样的.都是利用磁性物质的特性来保存信息.磁盘的原理就是利用电磁转换,学物理时我们知道电可以使物质带上磁性,而金属在磁场运动时切割磁感线时会产生电流.磁盘上有很多微粒的磁粉.当写通过磁头写数据时,磁头中的电流会导致磁粉极化,改变方向.读数据时,导体磁头经过磁粒的区域时会产生电流. 反正大概意思就是这样.

    硬盘的存储数据原理:

    我们知道信息存储在硬盘里,把它拆开也看不见里面有任何东西,只有些盘片。假设,你用显微镜把盘片放大,会看见盘片表面凹凸不平,凸起的地方被磁化,凹的地方是没有被磁化;凸起的地方代表数字1(磁化为1),凹的地方代表数字0。因此硬盘可以以二进制来存储表示文字、图片等信息。

    磁盘结构

    磁盘由一层一层的盘片组成,每个盘片区分上下面,每个盘面由磁道组成,磁道上凹凸不平,其中凸起的地方代表被磁头划过即数字1,反之,凹的地方表示数字0,故磁盘可以用二进制存储来表示文字、图片等信息。同时,各盘面相同半径的磁道组成柱面。磁盘还有另外一个重要组件,磁头,不同盘面上的磁头是同时移动的。
     

     

    内存存储数据原理:

    而内存的原理就完全不同,内存是晶体管制作的(CPU也是晶体管做的),而晶体管的特性就是我们平时常说的用开关的开和关来表示1,0.
    通过一些门电路的组合可用来表示数字和实现复杂的逻辑功能.而内存主要是用来临时保存数据.CPU就是处理一些逻辑关系.

    晶体管由于必须得通电,然后用电流的有无状态来表示信息,充放电后电荷的多少(电势高低)分别对应二进制数据0和1,所以只有通电的时候可以保存数据,电一断内存里的晶体管状态就处未知状态就啥用处也没了.而磁盘断电后磁性物质还会一直保持原样.

    我们知道访问磁盘时就通过磁头去指到固定的地方然后读取数据.不过内存就不一样,不需要啥磁头去读取数据,它是有数据总线连接,我们是通过总线去读取内存的数据.

    磁盘的读写原理:(柱面号,磁头号,扇区号)


    确定磁盘地址(柱面号,磁头号,扇区号),内存地址(源/目):

           当需要从磁盘读取数据时,系统会将数据逻辑地址传给磁盘,磁盘的控制电路按照寻址逻辑将逻辑地址翻译成物理地址,即确定要读的数据在哪个磁道,哪个扇区。

    为了读取这个扇区的数据,需要将磁头放到这个扇区上方,为了实现这一点:

             1)首先必须找到柱面,即磁头需要移动对准相应磁道,这个过程叫做寻道,所耗费时间叫做寻道时间,

             2)然后目标扇区旋转到磁头下,即磁盘旋转将目标扇区旋转到磁头下。这个过程耗费的时间叫做旋转时间。

    即一次访盘请求(读/写)完成过程由三个动作组成:
           1)寻道(时间):磁头移动定位到指定磁道 
           2)旋转延迟(时间):等待指定扇区从磁头下旋转经过 
           3)数据传输(时间):数据在磁盘与内存之间的实际传输

    内存的读写原理:(行地址+列地址)

    内存地址

    内存中的cell按矩阵形排列,每一行和每一列都会有一个对应的行地址线路(正规叫法叫做word line)和列地址线路(正规叫法是bit line),每个具体的cell就挂接在这样的行地址线路和列地址线路上,对应一个唯一的行号和列号,把行号和列号组合在一起,就是内存的地址。


    上图是Thaiphoon Burner的一个SPD dump,每个地址是一个字节。不过我们可以把这些数据假设成只有一个bit,当成是一个简单的内存地址表,左边竖着的是行地址,上方横着的是列地址。例如我们要找第七行、倒数第二列(地址为7E)的数据,它就只有一个对应的值:FD。当然了,在内存的cell中,它只能是0或者1。

    寻址

    数据要写入内存的一个cell,或者从内存中的一个cell读取数据,首先要完成对这个cell的寻址。寻址的过程,首先是将需要操作的cell的对应行地址信号和列地址信号输入行/列地址缓冲器,然后先通过行解码器(Row Decoder)选择特定的行地址线路,以激活特定的行地址。每一条行地址线路会与多条列地址线路和cell相连接,为了侦测列地址线路上微弱的激活信号,还需要一个额外的感应放大器(Sense Amplifier)放大这个信号。当行激活之后,列地址缓冲器中的列地址信号通过列解码器(Column Decoder)确定列地址,并被对应的感应放大器通过连接IO线路,这样cell就被激活,并可供读写操作,寻址完成。从行地址激活,到找到列地址这段时间,就是tRCD。

    从内存读取到磁盘预读
      由于存储介质的特性,磁盘本身存取就比主存慢很多,再加上机械运动耗费,磁盘的存取速度往往是主存的几百分分之一,因此为了提高效率,要尽量减少磁盘I/O。为了达到这个目的,磁盘往往不是严格按需读取,而是每次都会预读,即使只需要一个字节,磁盘也会从这个位置开始,顺序向后读取一定长度的数据放入内存。这样做的理论依据是计算机科学中著名的局部性原理:

      当一个数据被用到时,其附近的数据也通常会马上被使用。

      程序运行期间所需要的数据通常比较集中。

      由于磁盘顺序读取的效率很高(不需要寻道时间,只需很少的旋转时间),因此对于具有局部性的程序来说,预读可以提高I/O效率。

      预读的长度一般为页(page)的整倍数。页是计算机管理存储器的逻辑块,硬件及操作系统往往将主存和磁盘存储区分割为连续的大小相等的块,每个存储块称为一页(在许多操作系统中,页得大小通常为4k),主存和磁盘以页为单位交换数据。当程序要读取的数据不在主存中时,会触发一个缺页异常,此时系统会向磁盘发出读盘信号,磁盘会找到数据的起始位置并向后连续读取一页或几页载入内存中,然后异常返回,程序继续运行。

    参考:


    http://blog.csdn.net/hguisu/article/details/7408047
    硬盘的读写原理
    http://www.cnblogs.com/QQParadise/articles/2430204.html
    内存的工作原理及时序介绍
    http://blog.csdn.net/lujiandong1/article/details/44569161
     深入理解内存:原理简介
    原文链接:https://blog.csdn.net/zhanghongzheng3213/article/details/54141202

         欢迎大家关注我的微信公众号 您的关注就是我不懈的动力 

     

    展开全文
  • 内存是通过电子工作的,所以搜索速度物理结构无关,进行寻址时只需要微秒级别既可以 磁盘在寻址时需要1,移动磁头2,旋转磁盘 因为磁盘旋转的速度有限,所以寻址消耗毫秒别时间 *操作系统会将一个连续的数据...

    大规模的数据处理最大的难点就是:无法全内存计算

    因为处理的数据大,所以必须对磁盘进行处理,但是磁盘计算是非常低效的,所以处理的时候就要仔细的考虑算法

    寻址

    内存是通过电子工作的,所以搜索速度和物理结构无关,进行寻址时只需要微秒级别既可以

    磁盘在寻址时需要1,移动磁头2,旋转磁盘  因为磁盘旋转的速度有限,所以寻址消耗毫秒别时间

    *操作系统会将一个连续的数据存放在一起(win一般是4KB),这样磁盘旋转一周读取的数据就会多些,从而提高效率

    传输速度

    内存和硬盘的数据都会被读到cpu的缓存中,但是从内存到缓存和从硬盘到缓存的传输速度是差别很大的

    内存到缓存的速度大概有7-8GB/秒,而磁盘到缓存的速度大概只有60MB/秒


    因此内存计算和磁盘计算的速度差可以达到一百万倍以上


    展开全文
  • 在说磁盘和内存之前先说一下磁盘,顾名思义磁盘,像盘子一样,磁盘上有许多磁道,一圈套一圈,磁盘还有机械臂,通过机械的变换位置,来获取不同磁道上的数据。每圈磁道进行等长的切割,切割成的每块叫做基本存储单元...
  • 磁盘和内存读写简单原理

    千次阅读 2019-08-15 11:32:25
    当程序要读取的数据时传入内存地址...我们在程序中的数据处理主要是操作磁盘和内存,硬盘是磁盘里面最常用的一种.以前有所谓的软盘,也是磁盘的一种,原理硬盘是一样的.都是利用磁性物质的特性来保存信息.磁盘的原理...
  • 系统将数据磁盘读到内存的过程

    千次阅读 多人点赞 2020-12-19 10:21:09
    在开始DMA传输时,主机向内存写入DA命令块,向DMA控制器写入该命令块的地址,启动I/O设备。然后,CPU继续其他工作...2、从磁盘传输一块数据内存缓冲区 3、DMA控制器发出中断请求 4、执行“DMA结束”中断服务程序 ...
  • CPU、内存磁盘三者的关系

    千次阅读 2017-04-27 12:38:52
    CPU、内存磁盘三者关系
  • ㈠ 磁道以盘片中心为圆心,用不同的半径,划分出不同的很窄的圆环形区域,称为磁道㈡ 扇区磁盘上的每个磁道被等分为若干个弧段,这些弧段便是磁盘的扇区.扇区是磁盘最小的物理存储单元㈢ 柱面上下一串盘片中,相同...
  • 磁盘缓存和内存缓存的区别

    万次阅读 多人点赞 2015-08-23 22:49:50
    内存缓存高速缓存(英语:cache,英语发音:/kæʃ/ kash [1][2][3],简称缓存),其原始意义是指访问速度比一般随机存取存储器(RAM)快的一种RAM,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM...
  • 内存缓存 高速缓存(英语:cache,英语发音:/kæʃ/ kash [1][2][3],简称缓存),其原始意义是指访问速度比一般随机存取存储器(RAM)快的一种RAM,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM...
  • Ubuntu16.04 一个内存虚拟磁盘块设备驱动的例子 一、基本概念: 块设备(block device):能随机访问固定大小数据片(chunk)的设备,如硬盘,通常以安装文件系统的方式使用; 扇区(sector):块设备中的最小...
  • iostat - 报告 I/O 统计信息 .../usr/bin/iostat [-cCdDeEiImMnpPrstxXYz] [-l n] [-T u | ...iostat 实用程序重复报告终端、磁盘和磁带 I/O 活动,以及 CPU 使用情况。输出的第一行针对自引导后的所有时间;随后
  • 网络IO和磁盘IO详解 缓存IO 缓存I/O又被称作标准I/O,大多数文件系统的默认I/O操作都是缓存I/O。在Linux的缓存I/O机制中,数据先从磁盘复制到内核空间的缓冲区,然后从内核空间缓冲区复制到应用程序的地址空间。 ...
  • 页是磁盘与驻留在主内存中的缓冲池之间的传输单位。 大多数现代数据库系统使用的页面大小至少为8,192字节。 另一个需要注意的重要事项是,内存中的数据库页面是磁盘上首次读取时对应页面的精确副本。一旦从磁盘将...
  • 正常情况下svctm应该小于await,而svctm的大小和磁盘性能有关,CPU、内存的负荷也会对svctm值造成影响,过多的请求也会简介导致svctm值的增加。 await的大小一般取决与svctm的值I/O队列长度以及I/O请求模式...
  • 寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。 ...
  • Main memory reference 读取内存数据 100 ns Compress 1K bytes with Zippy 1k字节压缩 10,000 ns Send 2K bytes over 1 Gbps network 在1Gbps的网络上发送2k字节 20,000 ...
  • 硬盘的数据传输率(Data transfer rate)也称吞吐率,它表示在磁头定位后,硬盘读或写数据的速度。分为外部传输率 (External TransferRate) 内部传输率 (Internal Transfer Rate) ,两者之间有一块缓冲区[①]以...
  • 磁盘泄密威胁和数据销毁技术综述

    千次阅读 2009-12-02 17:15:00
    磁盘泄密威胁数据销毁技术综述中软通用产品研发中心 陈尚义 内容摘要:政府部门的有关规定对涉密计算机的磁盘数据销毁做出了明确规定,个人隐私在网络化信息化条件下逐渐成为挑战,商业机密知识产权保护成为...
  • 数据传输方式(零拷贝)

    千次阅读 2018-09-22 09:06:19
    在介绍零拷贝之前我想说下在计算机系统中数据传输的方式。   早期阶段: 分散连接,串行工作,程序查询。 在这个阶段,CPU就像个保姆一样,需要手把手的把数据从I/O接口从读出然后再送给主存。    这个阶段...
  • CPU内存磁盘IO过高问题处理

    千次阅读 2019-06-21 18:27:16
    可以用top命令查看哪一个进程占用cpu高 或者哪一个占用内存大 top - 13:55:32 up 59 days, 19:18, 2 users, load average: 0.00, 0.04, 0.09 Tasks: 161 total, 1 running, 160 sleeping, 0 stopped, 0 zombie %...
  • 系统优化是一项复杂、繁琐、长期的工作,优化前需要监测、采集、测试、评估,优化后也需要测试、采集、评估、监测,而且是一个长期持续的过程,不 是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书本上...
  • Linux下java获取CPU、内存磁盘IO、网络带宽使用率

    万次阅读 多人点赞 2013-03-30 21:34:39
    使用proc文件系统,"proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户应用程序可以通过proc得到系统的信息,并可以改变内核的某些...
  • 系统优化是一项复杂、繁琐、长期的工作,优化前需要监测、采集、测试、评估,优化后也需要测试、采集、评估、监测,而且是一个长期持续的过程,不 是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书本上...
  • 正常情况下svctm应该小于await,而svctm的大小和磁盘性能有关,CPU、内存的负荷也会对svctm值造成影响,过多的请求也会简介导致svctm值的增加。 await的大小一般取决与svctm的值I/O队列长度以及I/O请求模式...
  • 磁盘IO:缓存IO、直接IO、内存映射

    万次阅读 2013-04-09 18:40:16
    在Linux的缓存I/O机制中,数据先从磁盘复制到内核空间的缓冲区,然后从内核空间缓冲区复制到应用程序的地址空间。  读操作:操作系统检查内核的缓冲区有没有需要的数据,如果已经缓存了,那么就直接从缓存中返回;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 172,185
精华内容 68,874
关键字:

内存和磁盘的数据传输