欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

database develop and design(一)

程序员文章站 2022-05-05 12:09:45
...

database develop and design(一)

物理存储的机制。其中cache(高速缓存存储器)是一种介于主存和cpu之间的一种存储器,容量比较小但速度比主存高得多, 接近于CPU的速度。在计算机存储系统的层次结构中,是介于*处理器和主存储器之间的高速小容量存储器。它和主存储器一起构成一级的存储器。高速缓冲存储器和主存储器之间信息的调度和传送是由硬件自动进行的。

flash memory(闪存)即是一种长寿命的非易失性的存储器。

magnetic disk(磁盘),如图。定位十分接近platter(唱片一样的东西),几乎要直接接触的那种程度,通过read-write head来把编码信息刻录(不知道是不是应该这么理解)到platter上,然后platter上又分为一个又一个的track,类似年轮的那种应该,然后每一个track又被分为不同的sector(扇形区域),每一个sector是最小的read or write的单元。当在执行read/write的操作的时候,disk arms先转动,把head定位到具体的track上,然后platter转动,去找到相应的sector,然后数据就通过sector来传递,并且这个过程是需要时间的(下面会提到)。database develop and design(一)

Access time

上面说到的read/write是需要的时间被称之为access time(读取时间),access time = seek time +rotational latency +(transfer time),即寻找的时间+旋转需要的时间+翻译的时间。
1.Seek time – time it takes to position the arm over the right track.
Average seek time is about ½ of the worst case seek time (e.g., from the innermost to the outermost)
2. Rotational latency – time it takes for the sector to be accessed to appear under the head.
Average latency is 1/2 of the worst case latency (e.g., nearly 360 degree rotation)
3. Transfer time – time to actually read/write the data in the sector once the head is positioned, that is, the time for the disk to rotate over the sectors.
In most cases, transfer time is much less than the seek time and rotational latency.

Disk block(磁盘存储块):
1. 表示一个track上某些sectors内连续的序列

  1. 并且在磁盘和主存之间数据的转换就是以该种block的形式来进行交换的

  2. 范围从512bytes到several kilobytes不等:

    1.太小的blocks:从磁盘读取的时候,block的数目太多,那么在incode(incode条目描述一个文件,对应着文件系统上的一个文件或者目录,指出了件的名称,大小,连接数量,block指针等)指向block的时候的搜寻时间会增加,导致文件在读写方面的效率变差
    
    2.太大的blocks:如果录入的文件的大小并没有那么大,那么剩余的空间不会被空出来,而是同样算进这个文件之中,会占用一个block,那么这个剩余的空间就被浪费掉了。
    
    3.现在典型的block一般在4-16kilobytes之间
    

    Optimisation of disk-block access(关于磁盘存储块读取的最优化)

  3. 磁盘手规划的算法在读取之间就会被规定,一般是用电梯算法,就是从最里面(或者最外)往外(或里)读取,处理一路上这个方向的请求,然后再反过来继续这样的操作。

  4. File organisation(文件管理) 就是通过把相类似的文件组织起来来对存储块的读取进行优化:

    1. 数据存储其实就是相当于是文件的一个集合,逻辑上来说,每一个文件其实都是一群record(记录)组成的序列,而每一个record又都又一群序列组成。物理层面上来说,每一个文件都是一个block。
    
    2. 没有一个档案是会大过一个block的,或者说each record is entirely contained in a single block.
    
    3. 而文件组织是长度可变或者长度固定的记录。(fixed-length records , variable-length records)
    
    4. 在文件中的organisation record:1.堆组织法 。 2.顺序组织法。 3.散列组织法
    

    database develop and design(一)

关于上面提到的 fixed-length records(固定长度):

    1.  只分配给长度不超过block大小的records存储在里面。

    2. 不适合移动records(需要其它的block来介入) 

    3. 关于上述内容的solutions:
            1).分配一个一定字节的file header(文件头)
            2).从一个链表(linked list)中删除records
            3)当插入新的记录时,我们把这个记录指向文件头(即上面说到的file header),然后改变文件头的指针指向
            新的下一个有效记录,如果没有空间,那么就把这个记录放置到文件的末尾。

database develop and design(一)

关于上面提到的 vairable-length records(可变长度):

    1.  满足可变长度的attributes(属性,我认为就是指的一个字段,例如 sid int这种)的记录分为两个部分
                1)拥有一个初始固定长度的attributes
                2)有着满足可变attributes的数据

    2.  长度可变的attribute一般被表示为offset和length
                1)offset表示存入这个attribute的数据必须是在这个记录里面的内容(原话:offset denotes
                 where the data for that attribute begins within the record )
                2)length表示这个可变(长度)的属性的长度

    3.  在block中存储可变长的records一般用的是页结构(slotted-page structure)
                1)文件头有很多record的条目
                2)在block的最后会留下一些*空间
                3)每一条record都是由若干条条目组成的,而每一条条目都有他的定位和长度

    4.  在存储块中,records的分配一般都是连续并且是从block的最后的地方开始分配

    5. 在block中的free space同样是连续的,  between the final entry in the header array, and 
    the first record.(不太理解的话看下面的图就知道是什么了)

    6. 当一个record被插入时,分配的空间总是从最后开始的

    7. 如果一个record被删除,那么它原来占用的空间就会腾出来。并且,在被删除前,这个record就会在block内
    被移除,所以第一个record和header最后一个条目间的free space是不会变的

database develop and design(一)

关于文件中records的各种组织:

    1. Heap——record会被随机放置到文件中有空余空间的地方

    2.Sequential——每一条records是按照一定的顺序放置的,

    3.Hashing —— 通过哈希函数来计算每一个record里面的attribute,主要体现当需要替换数据的时候。

    4.每一个相互关联的records有可能被分到不同的文件中

每一个组织的好坏:
database develop and design(一)

sequential file organisation 适合那种需要按照顺序来存储的设备,并且要按照一个search-key来排列,需要一直来维护这个文件里面的顺序。

最后,关于多表联合:

database develop and design(一)

ps:
1.关于上述的fixed-length和variable-length指的是一个file中record的数量,一个是固定数量,一个是可变数量。

2.关于上述的提到各种组织(organisation),翻译过来刚开始有点不太好理解,后来想了一下应该是表示的是record被放在file中的各种形式。

2.关于上述硬盘的head,track,cylinder,sector

side/ head
硬盘一般是由一片或几片圆形薄膜叠加而成。每个圆形薄膜都有两个”面”(Side),这两个面都是用来存储数据的。依次称为0面、1面、2面……由于每个面都专有一个读写磁头,也常用0头(head)、1头……称之。硬盘面数(或头数),少的只有2面,多的可达数十面。
track——磁道——一个圈
读写硬盘时,磁头不动,磁盘是旋转的,则连续写入的数据是排列在一个圆周上的。我们称这样的圆周为一个磁道(Track)。 磁头不动,就是在一个磁道上读写磁头移动,就会在不同磁道上读写根据硬盘规格的不同,磁道数可以从几百到数千不等一个磁道上可以容纳数KB的数据(一个track包含数个sector)
cylinder—-柱面———
外观像一个圆筒子各面上磁道号相同的磁道合起来,称为一个柱面(cylinder距轴的距离相同的一组track
Sector
一个track上可以容纳数KB的数据,而主机读写时往往并不需要一次读写那么多,于是,磁道又被按512字节划分成若干段,每段称为一个扇区(Sector)。一个扇区size是固定的512字节 计算机对硬盘的读写,是以扇区为最小单位即使只读某一个字节,也必须一次把这个字节所在的扇区中的512字节全部读入内存
block—文件系统(FS)的最小存取空间
一个 Block 最多仅能容纳一个文件(即不存在多个文件同一个block的情况)
即如果一个文件比block小,他也会占用一个block,因而block中空余的空间会浪费掉
一个大文件,可以占多个甚至数十个成百上千的block