CN103257831A - 存储器的读写控制方法及对应的存储器 - Google Patents
存储器的读写控制方法及对应的存储器 Download PDFInfo
- Publication number
- CN103257831A CN103257831A CN2012100382064A CN201210038206A CN103257831A CN 103257831 A CN103257831 A CN 103257831A CN 2012100382064 A CN2012100382064 A CN 2012100382064A CN 201210038206 A CN201210038206 A CN 201210038206A CN 103257831 A CN103257831 A CN 103257831A
- Authority
- CN
- China
- Prior art keywords
- data
- page
- storer
- piece
- write
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种存储器的读写控制方法及对应存储器和服务器。包括:将存储器的存储资源以块为单位进行划分;写入数据时:将要写入的数据合并成数据块,将所述合并后的数据块写入存储器的空闲块中,记录所写数据的标识及其对应的索引信息,每条所写数据的索引信息为该数据在存储器中的偏移量信息;读取数据时:按照欲读数据的标识和索引信息从存储器的相应偏移量处读取数据。利用本发明,在对存储器实现读写控制的同时,降低写数据时对存储器的I/O操作次数,提高对存储器的写操作效率。
Description
技术领域
本发明涉及数据存储技术领域,尤其涉及一种存储器的读写控制方法及对应的存储器和服务器。
背景技术
目前的数据存储技术中,通常在存储器中以块(Block)为单位对存储资源进行划分。也就是说:将存储器按固定大小区分为多个区域,每一个区域,称为一个块。在现有存储器中分为两种块:一种块叫做基本块,用来进行哈希(Hash)计算定位使用,以方便数据的定位;另一种块叫做溢出块,用于在基本块不够用时,存储溢出部分的数据。
现有技术中,数据在存储器中存储,是以数据的关键字(Key)进行Hash计算后再取模,得到一个存储器的块偏移量,在存储器的该偏移量处的块直接写入数据;如果发现该偏移量处的块已经有了数据,则需要读取出来,把新数据和老数据打包在一起再次写入该块。如果指定偏移量处的块已经存储满了,则把还未写入的数据添加到溢出块,并在该偏移量处的块的尾部保存溢出块地址。
图1为现有技术的一种存储器读写控制的示意图。参见图1,如果一个数据的Key经过Hash计算并取模后的值为3,则把该数据存储在存储器的基本块中的第3块中,并没有任何索引信息;读取该数据时,也是相同的定位流程,即对该数据的Key经过Hash计算并取模后的值为3,则到存储器的基本块的第3个块把所有数据读取出来,然后解码,得到该Key对应的数据。如果该第3块原来就有数据,那么在写入此Key对应数据的时候,先把原来的数据读出来,将新旧数据合并(编码)后,再一起写入该第3块。
图2为现有技术的一种存储器读写控制时使用溢出块的示意图。参见图2,当向存储器的基础块的所述第3块写数据后,该第3块被写满、但当前数据还没有写完的时候,则找到一个空闲的溢出块,将剩余的数据写入该空闲的溢出块中,并在所述基础块的第3块的尾部保存所写的溢出块的地址。在读取数据时,先读取所述基础快中第3块的数据,然后判断读取出的数据是否完整,如果不完整则根据块尾部的溢出块地址去对应的溢出块读取出数据。
现有技术的缺点如下:
写数据时,每写一个数据都需要对存储器进行至少一次输入/输出(I/O)操作,在原块中有数据时还需要读一次,以便合并老数据写入,这样会造成更多的I/O操作。因此,现有技术对存储器进行写数据时的I/O操作次数比较多,存储器的写操作效率很差。现有技术尤其是对于固态硬盘(SSD,solidstate disk)这种寿命受限于擦除数、随机写对性能和寿命都有影响的存储器,支持得不好,导致写数据时过多的I/O操作不但导致SSD写操作效率很差,而且严重影响了SSD的寿命。
发明内容
有鉴于此,本发明的主要目的在于提供一种存储器的读写控制方法及对应的存储器和服务器,在对存储器实现读写控制的同时,降低写数据时对存储器的I/O操作次数,提高对存储器的写操作效率。
本发明的技术方案是这样实现的:
一种存储器的读写控制方法,包括:
将存储器的存储资源以块为单位进行划分;
写入数据时:将要写入的数据合并成数据块,将所述合并后的数据块写入存储器的空闲块中,记录所写数据的标识及其对应的索引信息,每条所写数据的索引信息为该数据在存储器中的偏移量信息;
读取数据时:按照欲读数据的标识和索引信息从存储器的相应偏移量处读取数据。
一种存储器,该存储器的存储资源以块为单位进行了划分;并包括:
写入控制模块,用于将要写入的数据合并成数据块,将所述合并后的数据块写入存储器的空闲块中,记录所写数据的标识及其对应的索引信息,每条所写数据的索引信息为该数据在存储器中的偏移量信息;
读取控制模块,用于按照欲读数据的标识和索引信息从存储器的相应偏移量处读取数据。
一种服务器,其包括至少一个上述的存储器。在所述存储器的数量为两个以上时,所述将所述合并后的数据块写入存储器的空闲块中具体为:从第一个存储器的第一个块起,遍历所有存储器的第一个块,如果没有找到空闲块则遍历所有存储器的下一个块,直到出现空闲块为止,将所属合并后的数据库写入该空闲块中。
本发明在写入数据时,先将一个以上的数据合并成数据块,再将合并的数据块写入存储器的空闲块,将所写数据所在的块及在该块中的偏移量信息作为该数据的索引信息进行记录,在读取数据时根据欲读数据的索引信息从存储器中对应的块和块中的偏移量处读取数据。因此本发明首先可以实现对存储器进行读写控制;同时与现有技术相比,本发明在写数据时不必每个数据都要对存储器进行一次I/O操作,而是将多个数据合并后统一进行一次I/O操作写入存储器,因此本发明降低了写数据时对存储器的I/O操作次数,提升了对存储器的写操作效率。
所述对存储器的I/O操作次数可以用每秒进行读写(I/O)操作的次数(I/OPS,Input/Output OperatI/Ons Per Second)衡量,本发明可以大大降低写数据时的I/OPS,提高了存储器的写数据效率。
本发明尤其适用于SSD这种寿命受限于擦除数、随机写对性能和寿命都有影响的存储器,由于写数据时I/O操作次数大大减少,不但提高了SSD写操作的效率,而且延长了SSD的寿命。
附图说明
图1为现有技术的一种存储器读写控制的示意图;
图2为现有技术的一种存储器读写控制时使用溢出块的示意图;
图3为本发明所述存储器读写控制方法的一种示意图;
图4为本发明所述的存储器的一种组成示意图;
图5为本发明的以块和页为单位划分存储器存储资源的一种示意图;
图6为本发明所述将要写入的数据依次合并写入内存块的各个页中的具体流程图;
图7为经过图6所述流程处理后的一种内存块内各页数据分布图;
图8为一种索引信息的示意图;
图9为存储器的数量为一个以上时查询空闲块并写入合并数据块的一种示意图;
图10为一种对空洞进行数据紧凑处理的示意图。
具体实施方式
下面结合附图及具体实施例对本发明再作进一步详细的说明。
图3为本发明所述存储器读写控制方法的一种示意图。参见图3,本发明的方法将存储器的存储资源以块(如图中的blk)为单位进行划分,以方便索引数据;写入数据时:将要写入的数据合并成数据块,将所述合并后的数据块写入存储器的空闲块中,记录所写数据的标识及其对应的索引信息,每条所写数据的索引信息为该数据在存储器中的偏移量信息;读取数据时:按照欲读数据的标识和索引信息从存储器的相应偏移量处读取数据。
数据的标识通常为数据的key,即该数据在存储中的唯一标识信息,例如数据的标识对应为某个人在某个时刻发表的一条信息,查找这条信息时,通过这个数据的标识就可以找到数据在存储器中的索引信息(偏移信息),进而通过索引信息找到该条信息。
图4为本发明所述的存储器的一种组成示意图,该存储器可以执行本发明所述的方法。参见图4,该存储器的存储资源以块为单位进行了划分;并包括:
写入控制模块,用于将要写入的数据合并成数据块,将所述合并后的数据块写入存储器的空闲块中,记录所写数据的标识及其对应的索引信息,每条所写数据的索引信息为该数据在存储器中的偏移量信息;
读取控制模块,用于按照欲读数据的标识和索引信息从存储器的相应偏移量处读取数据。
本发明所述的方法和存储器中,各条数据的索引信息可以为:该数据所属块在存储器中的偏移量信息(如第几个块)。在读取数据时,可以按照数据的标识从索引信息中查询到该数据所属块在存储器中的偏移量,从该偏移量处读取出该块的所有内容,再根据所述数据的标识从该块的内容中读取出对应的数据。
本发明也可以在写数据时进一步确定所写数据在所述合并后的数据块中的偏移量信息。各条数据的索引信息也可以是:该数据所属块在存储器中的偏移量、以及该数据在该块中的偏移量。在读取数据时,可以按照数据的标识和索引信息,根据该数据所属块在存储器中的偏移量信息、以及该数据在该块中的偏移量就可以确定出该数据在存储器中的绝对偏移量,从该绝对偏移量即从该数据所属块的相应偏移量处读取出对应的数据。这样在读取数据时就可以不必读取出整块的数据,只需要读取出所要读的数据即可。
本发明所述的方法和存储器中,所述存储器中的块可以用细粒度更小的页为单位进行进一步的划分。并且,在写数据时,所述写入控制模块进一步在合并所述数据块时以页为单位对所述数据块进行划分;所述块及数据块的大小为所述页的大小的整数倍。
在写入数据时在该数据所属页中记录该数据在该页中的偏移量;该数据的索引信息可以为:该数据所属页在存储器中的偏移量信息。在一种实施例中,该数据所属页在存储器中的偏移量信息可以直接由在存储器中的绝对偏移量来表示,即该页的页号在本存储器中是唯一的,从第一个块的第一个页开始依次排列下来,直到所有块的所有页都有一个唯一的页号;在另一种实施例中,该数据所属页在存储器中的偏移量信息也可以由该数据所属块在存储器中的偏移量和所属页在该所属块内的相对偏移量共同来表示。
在读数据时,具体为:根据欲读数据的标识和索引信息从存储器中读取该数据所属页的内容,从该页中读取该数据在该页的偏移量信息,根据该偏移量信息从该页中读取数据。同上,一种实施例中可以直接按照该所属页在存储器内的绝对偏移量来读取该数据所属页的内容;另一种实施例中可以按照该数据所属块在存储器中的偏移量和所属页在该所属块内的相对偏移量,来读取该数据所属页的内容。
在一种具体实施方案中,所述存储器中所划分的各个块的大小相同,所述合并的数据块大小和存储器中所划分的块的大小相同。这样可以是处理操作更为简洁。
由于本发明进一步用比块更小细粒度的“页”对块进行划分,写数据时将所写数据所在的块及在该块中的页的偏移量信息作为索引信息,在读数据时,根据索引信息读取对应块的对应页的数据,从页中读取中所要的数据。因此本实施例在读数据时,不必读取整块的数据,而只读取一页的数据即可,实现了小粒度读取,减少不必要的数据读取,降低读数据时的数据吞吐量,进一步提升了存储器的读数据的效率。
本发明所划分的块的大小在不同的实施例中可以不同。图5为本发明的以块和页为单位划分存储器存储资源的一种示意图。该图5是一种适用于SSD的实施例,在该实施例中,根据SSD以512K为擦除单元,4K为读取单元的特性,将SSD划分为512K为一个块存储,整个磁盘的块数=磁盘大小/512K。在块内以4K为一个页,将一个块划分为128个页。
需要说明的是,本发明并不限定在SSD存储器,其它存储器也适用。
本发明所述在写入数据时,将要写入的数据合并成数据块的一种具体实施方式可以为:在内存中分配内存块,以页为单位对该内存块进行划分,将要写入的数据依次合并写入该内存块的各个页中,从而合并成数据块。
图6为本发明所述将要写入的数据依次合并写入内存块的各个页中的具体流程图。假如存储器中一个块的大小为512K,内存块的大小也是512K,一个页的大小为4K。假设当前有一部分数据源(小于512K,每个数据都由key来区分)需要写入存储器,则将欲写入的数据组织成一个块,写入存储器,块内以页组织。具体是从内存块的第一页开始,依次遍历所述内存块中的各个页,对于每一个当前页,执行图6所示的流程,具体包括:
步骤601、判断当前是否有要写入数据的当前残留数据,该当前残留数据的定义请见步骤603和步骤608,如果是,则执行步骤602,否则执行步骤604;
步骤602、判断当前残留数据能否全部写入当前页,如果能则执行步骤604;否则执行步骤603;
步骤603、将当前残留数据写入当前页,直至写满当前页,将未写入的数据作为新的当前残留数据,之后执行步骤609;
步骤604、判断数据源中是否还有未写入的数据,如果是则执行步骤605,否则执行步骤608;
步骤605、从数据源中读取下一个未写入的数据;
步骤606、判断该下一数据能否全部写入当前页,如果能则返回步骤604,否则执行步骤607;
步骤607、确定从数据源中所读的数据的key、大小、所读数据在当前页中的偏移量、以及所读数据的数量,将这些确定出的信息记录在当前页的头部,并确定各数据所属页在该内存块中的偏移量(即该内存块中的第几个页),供从存储器中读取数据时对数据进行定位;
步骤608、将所述当前残留数据和从数据源读取的数据依次写入当前页,直到当前页满,未写入的数据作为新的当前的残留数据;
步骤609、判断当前页是否为最后一页,如果是则结束本流程,否则将下一页作为当前页,返回步骤601。
通过上述图6的处理,本发明可以把批量的数据存入一个块中,每一页都保存了本页数据的Key。同一个数据是在相邻的页存储,这样做的好处是,一个数据跨页时,操作系统有预读功能,可以把后面的页一起读到并缓存,可大大提升读数据的性能。
图7为经过图6所述流程处理后的一种内存块内各页数据分布图。参见图7,同一块数据,有可能在一个页中;同一个页,有可能存有多个数据;也有可能一个数据横跨多个页,但是同一数据在块内是连接的,分配连续页。
如果要写入存储器的数据源大于512K,则将剩余的数据重新组织成一个块,写入存储器,块内以页组织。每一页的执行流程如图6所述。
要写入的数据经过上述处理,在内存中组织合并成了数据块,之后需要从存储器中查找出一个空闲块,将合并后的数据块写入该空闲块中。
本发明中,需要标识存储器中的每个块的使用状态,用于识别是空闲块还是已使用的块(简称已用块)。存储器在划分块后的初始状态时,每个块的使用状态都设置为空闲块,当向一个块中写入数据后,则该块的使用状态被设置为已用块。
在一种具体实施例中,本发明可以开辟一块内存,专门用来保存每个块的使用状态信息,其中包括每个块在存储器中的偏移量(例如是第几个块)以及标识位,如该块已使用,则其标识位为1,否则为0(即为空闲块)。通常对于一块1T空间的存储器,如果每个块为512K,则大约可以划分200W个块,即2M*512K=1T。这2M个块,仅需2M*1bit=250K的内存即可。
在向存储器写入所述在内存中合并后的数据块之前,需要在内存中查询所述块的使用状态信息。具体的查询方式可以依次查询,也可以以其它策略查询。当查询到一个空闲块时,则将所述在内存中合并的数据块写入该空闲块,之后将该空闲块的使用状态信息中的标识位设置为1,表示该块为已用块。
在向存储器的空闲块写入所述合并后的数据块后,则将所写数据(即所述合并后的数据块中的各个数据,每个数据都通过key区分)所在的块的偏移量(即该数据块所写入的空闲块在存储器中为第几个块)、以及该数据在该块中的偏移量信息作为所写数据的索引信息进行记录。所述该数据在该块中的偏移量信息具体为:该数据所属的页在该块中的偏移量信息(如步骤607所述)。
每个数据的索引信息可以保存在内存中,用于指示该数据在存储器中的位置。在一种具体实施例中,所述索引信息为一个整数(Int类型,4字节),用于指示当前数据所在的页号。如图8所示为一种索引信息的示意图。参见图8,一个数据的索引信息与该数据的key具有对应关系,可以通过数据的key查找到该数据的索引信息、所述索引信息可以是该数据所属页在存储器中的绝对页号,即该页的页号在本存储器中是唯一的,从第一个块的第一个页开始依次排列下来,直到所有块的所有页都有一个唯一的页号;所述索引信息也可以是该数据所属块的号码(即偏移量)以及该数据所属页在该所属块中的相对页号(即块中的相对偏移量)。
在读取某个数据时,根据该数据的key查询对应的索引信息,查找索引信息即可知道该数据所属页在存储器中的偏移量(如页号),然后根据该数据所属页的页号从存储器中读取出该页的内容,如步骤607所述,该页的头部记录了本页中所记录的数据的key、大小、该数据在当前页中的偏移量、以及所读数据的数量,根据该数据的key找到该数据在该页的偏移量,从偏移量处开始按照该数据的大小读取相应大小的数据。如果根据该数据的大小判断出当前页没有完全记载该数据,则自动从下一页读取出剩余的数据。
上述记录在内存中的信息,如索引信息以及上述存储器每个块的使用状态信息,都可以使用目前的binlog技术定期、以及关闭数据处理系统前保存到存储器中,当数据处理系统重启后,从存储器的对应位置重新读取这些索引信息和每个块的使用状态信息到内存中,以供存储器的读写控制使用。
本发明中所述存储器的数量有可能为两个以上,例如有些存储器的存储资源中可以划分出一个以上的逻辑磁盘,每个逻辑磁盘都可以看成一个存储器,其内部的存储资源都以所述块和所述页为单位进行划分。图9为存储器的数量为一个以上时查询空闲块并写入合并数据块的一种示意图。参见图9,在存储器的数量为一个以上时(例如图中有多个磁盘,每个磁盘可以看成一个存储器),所述将合并后的数据块写入存储器的空闲块中的具体方式可以为:从第一个存储器的第一个块起,遍历所有存储器的第一个块,如果没有找到空闲块则遍历所有存储器的下一个块,直到出现空闲块为止,将所述合并后的数据块写入该空闲块中。即所有存储器的空闲块的写入是顺序均衡的。下次向存储器中写入数据块时从上一次返回空闲块的位置开始遍历查找新的空闲块;当然如果进行过数据紧凑处理的话,由于有可能空出新的空闲块,因此下一次向存储器中写入数据块时从头开始遍历查找新的空闲块。由于在写入时在存储器中顺序均衡地选择空闲块写入,从而不存在一块存储器一直忙,或者一直闲的状态,可以均衡分配存储器的写入资源。
在现有技术中,还存在一种覆盖写入的问题,也就是说,中途发生掉电,有可能只覆盖了部分数据,不能保证数据完整性。这时这个区域,以及对应的溢出块,全不能正确访问。
针对这个问题,本发明如果在写数据时只是对原有数据的更新修改,而不是新增数据时,可以将新数据与其他待写入数据合并成数据块,将数据块写入存储器的新的空闲块中,并更新该数据的索引信息。在读取该数据时,按照该数据的key查询所述更新后的索引信息,找到新数据的存储位置,从该位置读取该最新的数据。
比如原来的标识为key1的数据在Blk1中,此时要更新该key1的数据,本发明会把这个数据组装到512K写到Blk2中,与原来数据无关,此时也不用关心数据原来的位置,直接把key1的索引信息更新,指示此块数据现在的位置是在Blk2中。这样就解决了现有技术中数据覆盖写带来的问题。
因为本发明在更新数据时,将新数据与其他待写入数据合并成数据块,将数据块写入存储器的新的空闲块中,并更新该数据的索引。这样操作的优点在于:如果此数据是热点数据,一直不停地更新,现有技术会将存储器的同一位置一直读取写入,有可能将存储器写坏,导致存储器中的一整块数据都不可用,而本发明则每次更新数据时都会变更该数据在存储器中的位置,避免在同一位置的频繁读写操作对存储器的损坏;同时,如果在更新数据时写到一半断电的话,现有技术是在同一位置覆盖写入,覆盖到一半断电则将原数据也销毁了,而本发明在更新数据是将新数据写到其它位置,即使发生断电事故,原数据也不会被销毁,还可以继续使用原数据,保证了中途发生掉电时的数据完整性以及数据的正确访问。
由于本发明在更新数据时,将新数据写入新的空闲块中,因此原数据实质上已经失效,这些原数据实际是可以删除的,但是还占用着原有块中的空间,这部分可以被删除的空间,被称为空洞。由于本发明上述的数据更新方式,会导致空洞的产生和增多。因此本发明还提出了一种数据紧凑处理方式,来减少甚至消除所述空洞。具体方式是:设置存储器中每个块的有效长度;在更新存储器中的已有数据时,将该数据对应的原数据所在的块的有效长度减去该原数据的长度;定时、实时或者人工触发判断存储器中各个块的有效长度,将有效长度小于预定长度(如小于该块总长度的50%)的块中的有效数据进行合并,将合并后的有效数据写入新的空闲块中,并更新所述有效数据的索引;将合并前的所述各个有效长度小于预定长度的块设置为空闲块。
假设数据K原来在Blk1中,当数据K有更新在Blk2时,Blk1的对应数据K相当于垃圾数据,这个空间就是空洞,是需要回收的,不然会有比较多的数据空洞,引起存储器满。因此,需要定期对一些垃圾数据进行回收。本发明中在内存中设置有一块块信息内存,用于保存每个块的有效长度。数据K在写到Blk2后,会查到原来的索引在Blk1中,把Blk1的有效长度减小N个字节(数据K的大小)。之后定期扫描所属块信息内存,发现当前块的有效长度小于配置值(如小于该块总长度的50%),即进行回收。回收时,直接把几个需要回收的块的有效数据取到,合并为一个块,写入存储器,并重新更新这个块内所有有效数据的索引信息。把回收过的块置为空闲块,供下次使用。
图10为一种对空洞进行数据紧凑处理的示意图。如图10所示,其中有灰度填充的方框为空洞部分,当两个块中空洞比较多时,合并为一个块,写入到第三个块,把原来两个块标识为空闲块。
本发明还公开了一种服务器,包括至少一个本发明上述的存储器。在所述存储器的数量为两个以上时,所述将所述合并后的数据块写入存储器的空闲块中具体为:从第一个存储器的第一个块起,遍历所有存储器的第一个块,如果没有找到空闲块则遍历所有存储器的下一个块,直到出现空闲块为止,将所属合并后的数据库写入该空闲块中。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (14)
1.一种存储器的读写控制方法,其特征在于,包括:
将存储器的存储资源以块为单位进行划分;
写入数据时:将要写入的数据合并成数据块,将所述合并后的数据块写入存储器的空闲块中,记录所写数据的标识及其对应的索引信息,每条所写数据的索引信息为该数据在存储器中的偏移量信息;
读取数据时:按照欲读数据的标识和索引信息从存储器的相应偏移量处读取数据。
2.根据权利要求1所述的方法,其特征在于,
在写数据时进一步确定所要写入的数据在所述合并后数据块中的偏移量信息;
所述数据的索引信息为:该数据所属块在存储器中的偏移量信息、以及该数据在该块中的偏移量;
在读取数据时,具体为:按照预读数据的标识和索引信息,从存储器中该数据所属块内的相应偏移量处读取出对应的数据。
3.根据权利要求1所述的方法,其特征在于,
该方法进一步将所述存储器中的块以页为单位进行划分,在合并所述数据块时以页为单位对所述数据块进行划分,所述块及数据块的大小为所述页的大小的整数倍;
在写入数据时,进一步在该数据所属页中记录该数据在该页中的偏移量;该数据的索引信息为:该数据所属页在存储器中的偏移量信息;
在读数据时,具体为:根据欲读数据的标识和索引信息从存储器中读取该数据所属页的内容,从该页中读取该数据在该页的偏移量信息,根据该偏移量信息从该页中读取数据。
4.根据权利要求1或3所述的方法,其特征在于,所述在写入数据时将要写入的数据合并成数据块具体为:在内存中分配内存块,以页为单位对该内存块进行划分,将要写入的数据依次合并写入该内存块的各个页中,从而合并成数据块。
5.根据权利要求4所述的方法,其特征在于,所述将要写入的数据依次合并写入所述内存块的各个页中具体为:
从第一页开始,依次遍历所述内存块中的各个页,对于每一个当前页,执行下述流程:
步骤a01、判断当前是否有要写入数据的当前残留数据,如果是,则执行步骤a02,否则执行步骤a04;
步骤a02、判断当前残留数据能否全部写入当前页,如果能则执行步骤a04;否则执行步骤a03;
步骤a03、将当前残留数据写入当前页,直至写满当前页,将未写入的数据作为新的当前残留数据,之后执行步骤a09;
步骤a04、判断数据源中是否还有未写入的数据,如果是则执行步骤a05,否则执行步骤a08;
步骤a05、从数据源中读取下一个未写入的数据;
步骤a06、判断该下一数据能否全部写入当前页,如果能则返回步骤a04,否则执行步骤a07;
步骤a07、确定从数据源中所读的数据的key、在当前页中的偏移量、大小以及数量,将确定出的信息记录在当前页的头部;并确定各数据所属页在该内存块中的偏移量;
步骤a08、将所述当前残留数据和从数据源读取的数据依次写入当前页,直到当前页满,未写入的数据作为新的当前的残留数据;
步骤a09、判断当前页是否为最后一页,如果是则结束本流程,否则将下一页作为当前页,返回步骤a01。
6.根据权利要求1至5任一项所述的方法,其特征在于,所述存储器中所划分的各个块的大小相同,所述合并的数据块大小和存储器中所划分的块的大小相同。
7.根据权利要求6所述的方法,其特征在于,所述一个块的大小为512k,所述一个页的大小为4K。
8.根据权利要求1所述的方法,其特征在于,在所述存储器的数量为两个以上时,所述将所述合并后的数据块写入存储器的空闲块中具体为:
从第一个存储器的第一个块起,遍历所有存储器的第一个块,如果没有找到空闲块则遍历所有存储器的下一个块,直到出现空闲块为止,将所属合并后的数据库写入该空闲块中。
9.根据权利要求1所述的方法,其特征在于,在更新存储器中的已有数据时,将新数据与其他待写入数据合并成数据块,将数据块写入存储器的新的空闲块中,并更新该数据的索引信息。
10.根据权利要求9所述的方法,其特征在于,该方法进一步包括:
设置存储器中每个块的有效长度;
在更新存储器中的已有数据时,将该数据对应的原数据所在的块的有效长度减去该原数据的长度;
判断存储器中各个块的有效长度,将有效长度小于预定长度的块中的有效数据进行合并,将合并后的有效数据写入新的空闲块中,并更新所述有效数据的索引;将合并前的所述各个有效长度小于预定长度的块设置为空闲块。
11.一种存储器,其特征在于,该存储器的存储资源以块为单位进行了划分;并包括:
写入控制模块,用于将要写入的数据合并成数据块,将所述合并后的数据块写入存储器的空闲块中,记录所写数据的标识及其对应的索引信息,每条所写数据的索引信息为该数据在存储器中的偏移量信息;
读取控制模块,用于按照欲读数据的标识和索引信息从存储器的相应偏移量处读取数据。
12.根据权利要求11所述的存储器,其特征在于,所述存储器中的块以页为单位进行划分;
所述写入控制模块进一步用于在合并所述数据块时以页为单位对所述数据块进行划分,在写入数据时在该数据的所属页中记录该数据在该页中的偏移量;所确定的该数据的索引信息为:该数据所属页在存储器中的偏移量信息;
所述读取控制模块在读取数据时,具体用于根据欲读数据的标识和索引信息从存储器中读取该数据所属页的内容,从该页中读取该数据在该页的偏移量信息,根据该偏移量信息从该页中读取数据;
所述块及数据块的大小为所述页的大小的整数倍。
13.一种服务器,其包括至少一个权利要求11或12所述的存储器。
14.如权利要求13所述的服务器,在所述存储器的数量为两个以上时,所述将所述合并后的数据块写入存储器的空闲块中具体为:
从第一个存储器的第一个块起,遍历所有存储器的第一个块,如果没有找到空闲块则遍历所有存储器的下一个块,直到出现空闲块为止,将所属合并后的数据库写入该空闲块中。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210038206.4A CN103257831B (zh) | 2012-02-20 | 2012-02-20 | 存储器的读写控制方法及对应的存储器 |
PCT/CN2013/071385 WO2013123855A1 (zh) | 2012-02-20 | 2013-02-05 | 存储器的读写控制方法及对应的存储器和服务器 |
US14/463,071 US9990276B2 (en) | 2012-02-20 | 2014-08-19 | Read-write control method for memory, and corresponding memory and server |
US15/973,613 US10303596B2 (en) | 2012-02-20 | 2018-05-08 | Read-write control method for memory, and corresponding memory and server |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210038206.4A CN103257831B (zh) | 2012-02-20 | 2012-02-20 | 存储器的读写控制方法及对应的存储器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103257831A true CN103257831A (zh) | 2013-08-21 |
CN103257831B CN103257831B (zh) | 2016-12-07 |
Family
ID=48961775
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210038206.4A Active CN103257831B (zh) | 2012-02-20 | 2012-02-20 | 存储器的读写控制方法及对应的存储器 |
Country Status (3)
Country | Link |
---|---|
US (2) | US9990276B2 (zh) |
CN (1) | CN103257831B (zh) |
WO (1) | WO2013123855A1 (zh) |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103678577A (zh) * | 2013-12-10 | 2014-03-26 | 新浪网技术(中国)有限公司 | 一种数据更新方法及装置 |
CN104598161A (zh) * | 2013-10-31 | 2015-05-06 | 腾讯科技(深圳)有限公司 | 数据读取、写入方法和装置及数据存储结构 |
CN106503084A (zh) * | 2016-10-10 | 2017-03-15 | 中国科学院软件研究所 | 一种面向云数据库的非结构化数据的存储与管理方法 |
CN107562567A (zh) * | 2016-06-30 | 2018-01-09 | 华为技术有限公司 | 一种数据处理方法以及数据处理设备 |
CN108170455A (zh) * | 2018-03-12 | 2018-06-15 | 晶晨半导体(上海)股份有限公司 | 升级包的打包方法以及升级方法 |
CN108595109A (zh) * | 2017-12-29 | 2018-09-28 | 郑州云海信息技术有限公司 | 一种基于Ceph分布式存储系统的多客户端写的方法 |
CN108628539A (zh) * | 2017-03-17 | 2018-10-09 | 杭州海康威视数字技术股份有限公司 | 数据存储、分散、重构、回收方法、装置及数据处理系统 |
WO2019137322A1 (zh) * | 2018-01-09 | 2019-07-18 | 阿里巴巴集团控股有限公司 | 数据处理方法、装置及计算设备 |
CN110276713A (zh) * | 2019-05-06 | 2019-09-24 | 中国科学院计算机网络信息中心 | 一种面向遥感影像数据的高效缓存方法及系统 |
CN110658978A (zh) * | 2018-06-28 | 2020-01-07 | 杭州海康威视系统技术有限公司 | 数据处理方法、装置、电子设备及可读存储介质 |
CN110874194A (zh) * | 2018-08-31 | 2020-03-10 | 奈瑞尔德有限公司 | 持久存储设备管理 |
CN111026890A (zh) * | 2019-11-28 | 2020-04-17 | 天脉聚源(杭州)传媒科技有限公司 | 基于索引表的图片数据存储方法、系统、装置和存储介质 |
CN111221467A (zh) * | 2018-11-26 | 2020-06-02 | 深圳市茁壮网络股份有限公司 | 数据写入、读取方法及对应的装置 |
CN111241088A (zh) * | 2018-11-09 | 2020-06-05 | 北京京东尚科信息技术有限公司 | 数据写入方法、数据查询方法、装置及设备 |
CN111639076A (zh) * | 2020-05-14 | 2020-09-08 | 民生科技有限责任公司 | 一种跨平台高效键值存储方法 |
CN112084121A (zh) * | 2020-09-11 | 2020-12-15 | 深圳佰维存储科技股份有限公司 | 硬盘预读方法、装置、计算机可读存储介质及电子设备 |
CN112131140A (zh) * | 2020-09-24 | 2020-12-25 | 北京计算机技术及应用研究所 | 基于ssd的支持高效存储空间管理的键值分离存储方法 |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103761193B (zh) * | 2013-12-17 | 2016-09-14 | 记忆科技(深圳)有限公司 | 抑制逻辑页碎片产生的方法及系统 |
KR20170032052A (ko) * | 2015-09-14 | 2017-03-22 | 에스케이하이닉스 주식회사 | 에러정정 장치 및 에러정정 방법 |
CN105933240A (zh) * | 2016-04-27 | 2016-09-07 | 长沙丰灼通讯科技有限公司 | 一种有线和无线结合的数据高效传输方法 |
CN110471628B (zh) * | 2019-08-21 | 2022-12-02 | 深圳市时创意电子有限公司 | 一种可减少数据页分散的数据存储方法 |
CN113157680B (zh) * | 2021-04-26 | 2024-03-15 | 北京顺实科技有限公司 | 一种适用于时序数据库的数据块增量压缩及查询方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1632765A (zh) * | 2004-12-31 | 2005-06-29 | 大唐微电子技术有限公司 | 一种闪存文件系统管理方法 |
CN101533408A (zh) * | 2009-04-21 | 2009-09-16 | 北京四维图新科技股份有限公司 | 一种海量数据的处理方法及处理装置 |
CN101727295A (zh) * | 2008-10-31 | 2010-06-09 | 西安奇维测控科技有限公司 | 一种基于虚拟块闪存地址映射的数据写入及读出方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4608434B2 (ja) * | 2003-12-03 | 2011-01-12 | パナソニック株式会社 | 情報記録媒体のデータ処理装置及びデータ記録方法 |
CN100501702C (zh) * | 2007-01-17 | 2009-06-17 | 晶天电子(深圳)有限公司 | 一种闪存卡及其缓存、恢复数据的方法 |
CN101493753B (zh) * | 2008-01-22 | 2012-06-06 | 中兴通讯股份有限公司 | 一种高速缓冲存储器及其数据操作方法 |
US10248398B2 (en) * | 2008-04-07 | 2019-04-02 | Blackberry Limited | Method for virtualizing software applications |
US9495288B2 (en) * | 2013-01-22 | 2016-11-15 | Seagate Technology Llc | Variable-size flash translation layer |
-
2012
- 2012-02-20 CN CN201210038206.4A patent/CN103257831B/zh active Active
-
2013
- 2013-02-05 WO PCT/CN2013/071385 patent/WO2013123855A1/zh active Application Filing
-
2014
- 2014-08-19 US US14/463,071 patent/US9990276B2/en active Active
-
2018
- 2018-05-08 US US15/973,613 patent/US10303596B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1632765A (zh) * | 2004-12-31 | 2005-06-29 | 大唐微电子技术有限公司 | 一种闪存文件系统管理方法 |
CN101727295A (zh) * | 2008-10-31 | 2010-06-09 | 西安奇维测控科技有限公司 | 一种基于虚拟块闪存地址映射的数据写入及读出方法 |
CN101533408A (zh) * | 2009-04-21 | 2009-09-16 | 北京四维图新科技股份有限公司 | 一种海量数据的处理方法及处理装置 |
Cited By (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104598161A (zh) * | 2013-10-31 | 2015-05-06 | 腾讯科技(深圳)有限公司 | 数据读取、写入方法和装置及数据存储结构 |
CN104598161B (zh) * | 2013-10-31 | 2018-10-30 | 腾讯科技(深圳)有限公司 | 数据读取、写入方法和装置及数据存储结构 |
CN103678577A (zh) * | 2013-12-10 | 2014-03-26 | 新浪网技术(中国)有限公司 | 一种数据更新方法及装置 |
CN107562567A (zh) * | 2016-06-30 | 2018-01-09 | 华为技术有限公司 | 一种数据处理方法以及数据处理设备 |
CN106503084A (zh) * | 2016-10-10 | 2017-03-15 | 中国科学院软件研究所 | 一种面向云数据库的非结构化数据的存储与管理方法 |
US11010072B2 (en) | 2017-03-17 | 2021-05-18 | Hangzhou Hikvision Digital Technology Co., Ltd. | Data storage, distribution, reconstruction and recovery methods and devices, and data processing system |
CN108628539A (zh) * | 2017-03-17 | 2018-10-09 | 杭州海康威视数字技术股份有限公司 | 数据存储、分散、重构、回收方法、装置及数据处理系统 |
CN108595109A (zh) * | 2017-12-29 | 2018-09-28 | 郑州云海信息技术有限公司 | 一种基于Ceph分布式存储系统的多客户端写的方法 |
WO2019137322A1 (zh) * | 2018-01-09 | 2019-07-18 | 阿里巴巴集团控股有限公司 | 数据处理方法、装置及计算设备 |
US11294592B2 (en) | 2018-01-09 | 2022-04-05 | Alibaba Group Holding Limited | Method and device for data processing, and computer device |
CN108170455A (zh) * | 2018-03-12 | 2018-06-15 | 晶晨半导体(上海)股份有限公司 | 升级包的打包方法以及升级方法 |
CN110658978A (zh) * | 2018-06-28 | 2020-01-07 | 杭州海康威视系统技术有限公司 | 数据处理方法、装置、电子设备及可读存储介质 |
CN110658978B (zh) * | 2018-06-28 | 2022-11-01 | 杭州海康威视系统技术有限公司 | 数据处理方法、装置、电子设备及可读存储介质 |
CN110874194A (zh) * | 2018-08-31 | 2020-03-10 | 奈瑞尔德有限公司 | 持久存储设备管理 |
CN111241088A (zh) * | 2018-11-09 | 2020-06-05 | 北京京东尚科信息技术有限公司 | 数据写入方法、数据查询方法、装置及设备 |
CN111221467A (zh) * | 2018-11-26 | 2020-06-02 | 深圳市茁壮网络股份有限公司 | 数据写入、读取方法及对应的装置 |
CN110276713A (zh) * | 2019-05-06 | 2019-09-24 | 中国科学院计算机网络信息中心 | 一种面向遥感影像数据的高效缓存方法及系统 |
CN111026890A (zh) * | 2019-11-28 | 2020-04-17 | 天脉聚源(杭州)传媒科技有限公司 | 基于索引表的图片数据存储方法、系统、装置和存储介质 |
CN111639076A (zh) * | 2020-05-14 | 2020-09-08 | 民生科技有限责任公司 | 一种跨平台高效键值存储方法 |
CN111639076B (zh) * | 2020-05-14 | 2023-12-22 | 民生科技有限责任公司 | 一种跨平台高效键值存储方法 |
CN112084121A (zh) * | 2020-09-11 | 2020-12-15 | 深圳佰维存储科技股份有限公司 | 硬盘预读方法、装置、计算机可读存储介质及电子设备 |
CN112131140A (zh) * | 2020-09-24 | 2020-12-25 | 北京计算机技术及应用研究所 | 基于ssd的支持高效存储空间管理的键值分离存储方法 |
CN112131140B (zh) * | 2020-09-24 | 2023-07-14 | 北京计算机技术及应用研究所 | 基于ssd的支持高效存储空间管理的键值分离存储方法 |
Also Published As
Publication number | Publication date |
---|---|
US20180260318A1 (en) | 2018-09-13 |
WO2013123855A1 (zh) | 2013-08-29 |
US9990276B2 (en) | 2018-06-05 |
CN103257831B (zh) | 2016-12-07 |
US10303596B2 (en) | 2019-05-28 |
US20140359233A1 (en) | 2014-12-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103257831A (zh) | 存储器的读写控制方法及对应的存储器 | |
US6675281B1 (en) | Distributed mapping scheme for mass storage system | |
CN106951375B (zh) | 在存储系统中删除快照卷的方法及装置 | |
CN101493794B (zh) | 一种闪存数据处理方法及装置 | |
CN106548789B (zh) | 用于操作叠瓦式磁记录设备的方法和装置 | |
CN100419714C (zh) | 闪存存取方法、闪存文件系统的块替换方法及其管理装置 | |
JP5603997B2 (ja) | ストレージ装置及びデータ制御方法 | |
EP3153987B1 (en) | Duplicate data deletion method and device | |
KR101678868B1 (ko) | 플래시 주소 변환 장치 및 그 방법 | |
CN100481024C (zh) | 信息记录介质 | |
CN110032521A (zh) | 用于增强闪存转换层映射灵活性以得到性能和寿命改进的方法和系统 | |
US20110022807A1 (en) | Write once recording device | |
CN104346357A (zh) | 一种嵌入式终端的文件存取方法及系统 | |
CN105027090A (zh) | 用于固态驱动器中的物理到逻辑映射的方法、设备和系统 | |
CN101501623A (zh) | 感知文件系统的块存储系统、装置和方法 | |
US10552335B2 (en) | Method and electronic device for a mapping table in a solid-state memory | |
US20180253252A1 (en) | Storage system | |
CN112860594B (zh) | 一种固态盘地址重映射方法、设备及固态盘 | |
CN110134645B (zh) | 文件系统存储管理方法、读取方法、管理装置和读取装置 | |
CN103745007A (zh) | 一种文件管理方法及装置 | |
CN104598165A (zh) | 在嵌入式设备上对存储器提高耐用性的方法及装置 | |
KR100703680B1 (ko) | 플래시 파일 시스템 | |
CN109408416B (zh) | 一种地址映射表项页管理方法及装置 | |
US20070005929A1 (en) | Method, system, and article of manufacture for sector mapping in a flash device | |
KR20050079991A (ko) | 플래시 메모리의 효율적인 소거 횟수 평준화방법(k-평준화) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |