CN113868192B - 一种数据存储设备、方法与分布式数据存储系统 - Google Patents

一种数据存储设备、方法与分布式数据存储系统 Download PDF

Info

Publication number
CN113868192B
CN113868192B CN202111467385.9A CN202111467385A CN113868192B CN 113868192 B CN113868192 B CN 113868192B CN 202111467385 A CN202111467385 A CN 202111467385A CN 113868192 B CN113868192 B CN 113868192B
Authority
CN
China
Prior art keywords
data
cache
metadata
module
log
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.)
Active
Application number
CN202111467385.9A
Other languages
English (en)
Other versions
CN113868192A (zh
Inventor
文刘飞
陈坚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Sandstone Data Technology Co ltd
Original Assignee
Shenzhen Sandstone Data Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shenzhen Sandstone Data Technology Co ltd filed Critical Shenzhen Sandstone Data Technology Co ltd
Priority to CN202111467385.9A priority Critical patent/CN113868192B/zh
Publication of CN113868192A publication Critical patent/CN113868192A/zh
Application granted granted Critical
Publication of CN113868192B publication Critical patent/CN113868192B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/13File access structures, e.g. distributed indices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/16File or folder operations, e.g. details of user interfaces specifically adapted to file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/172Caching, prefetching or hoarding of files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed file systems

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

一种数据存储设备,具备高一致性,包括:读写控制单元、重定向缓存单元、存储单元;读写控制单元包括数据写入管理模块、元数据管理模块、日志管理模块、元数据数据库、元数据缓存模块、日志存储模块;重定向缓存单元包括缓存管理模块、SSD缓存盘、索引缓存模块、索引存储模块;数据写入管理模块收到数据写入请求;缓存管理模块在缓存空间写入请求中的数据;如果写入请求中的数据是初次写,标记该数据为正常缓存数据;对于覆盖写进行重新定向;把缓存映射和本次写入请求相关的元数据一起组成一个日志数据,日志管理模块将日志数据写入日志存储模块,然后再把元数据更新到元数据缓存模块,日志写入日志存储模块为原子操作。

Description

一种数据存储设备、方法与分布式数据存储系统
技术领域
本申请属软件研发技术领域,尤其涉及一种数据存储设备、方法与分布式数据存储系统,本发明数据存储设备可以作为一个独立的存储设备,也可以作为一个连接互联网的设备,也可以作为分布式数据存储系统中的一个存储节点。
背景技术
Key-Value Store 对于当今大规模、高性能的数据敏感型应用来说已经成为一个至关重要的设计模块。如电商平台、数据去重中心、图像存储和web对象缓存等等。
Ceph:是加州大学Santa Cruz分校的Sage Weil,为博士论文设计的新一代自由软件分布式文件系统。
数据一致性:在分布式环境中,在数据有多分副本的情况下,如果网络、服务器或者软件出现故障,会导致部分副本写入成功,部分副本写入失败。这种情况造成了各个副本之间的数据不一致,数据内容冲突。 在实际生产应用场景中,数据不一致的情况有很多,数据库、中间件、分布式系统交互,每个环节都有可能会产生数据不一致,轻则影响系统功能可用性,重则会带来一定的资金损失。
Bit-map:也即是Bit-map,基本思想就是用一个bit位来标记某一个元素的数据状态,即如果该bit对应的value为0 表示该数据不存在,如果该bit对应的value为1 表示该数据存在。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省存储空间。比如:在20亿个随机整数中找出某个数m是否存在其中,并假设32位操作系统,int占4字节,1字节=8位(1 byte = 8 bit)如果每个数字用int存储,那就是20亿个int,因而占用的空间约为(2000000000*4/1024/1024/1024)≈7.45G,如果按位存储就不一样了,20亿个数就是20亿位,占用空间约为(2000000000/8/1024/1024/1024)≈0.233G。
HDD:Hard Disk Drive的缩写,基本的电脑存储器。
如图9,Bcache软件是Linux内核块层cache。主要是使用SSD盘在IO速度较慢的HDD盘(图中Backing Device)上面做一层缓存,从而来提高HDD盘的IO速率。一个缓存设备(SSD)可以同时为多个后端设备(HDD)提供缓存。Bcache缓存支持三种缓存策略:writeback:回写策略,所有的数据将先写入缓存盘,然后等待系统将数据回写入后端数据盘中。 writethrough:直写策略(默认策略),数据将会同时写入缓存盘和后端数据盘。writearoud:数据将直接写入后端磁盘。
Bcache关键结构,数据分区 bcache将SSD空间分成若干个数据分区,典型值为512K,最好与SSD本身擦除块大小一致。缓存数据与元数据都是按数据分区来管理的。每个数据分区有个优先级编号,每次缓存数据读命中都会增加,然后所有的数据分区的优先级编号都会周期性地减少,不常用的会被回收,这个优先级编号主要是用来实现LRU缓存替换的。
数据分区内空间是追加分配的,只记录当前分配到哪个偏移,下一次分配的时候从当前记录位置往后分配。另外在选择数据分区来缓存数据时有两个优先原则:优先考虑Io连续性,即使Io可能来自于不同的生产者;其次考虑相关性,同一个进程产生的数据尽量缓存到相同的数据分区里。
Bcache的索引,bcache用B+树来管理缓存数据与HDD上数据块的对应关系,B+树所索引的数据映射结构在bcache中称为缓存映射。缓存映射就是记录缓存设备的缓存数据和后端设备数据的映射关系的。Bcache将一个缓存池中的多块HDD空间编址为一个地址空间,以HDD的id + IO请求的LBA为索引建立B+树;每个B+树的节点对应一个btree 数据分区,这个数据分区里存的就是一个个地缓存映射。Bcache为每个btree 数据分区申请一块连续内存作为metadata缓存。
写IO处理流程,以writeback模式为例,Bcache收到写入请求后,其处理流程如下:从当前的空闲数据分区中,为该写入请求分配一个缓存空间,并把写入请求的数据写入该缓存空间;当数据写入成功后,为该缓存生成一个缓存映射,并把缓存映射提交到日志队列进行持久化;把该缓存映射插入到bcache的btree索引树,由于btree索引中可能包含该写入请求对应数据的旧数据,因此会分如下几种场景来处理缓存映射的插入:如果写入请求对应新的缓存映射和现有缓存映射部分重合,则对现有缓存映射进行分裂,去掉重合部分,再插入写入请求对应的新的缓存映射;如果写入请求对应新的缓存映射和大于现有缓存映射,则无效掉对应的旧缓存映射,然后插入新的缓存映射;如果缓存映射处理成功,给上层应用返回IO写成功,否则返回IO写失败。
由于bcache处理写入请求,都是采用追加写/重定向写的方式,先申请新的SSD缓存空间用于缓存写入请求,再把旧的数据无效掉,因此如果在写SSD缓存或者更新b+树失败,依然能够保证旧数据的完整性。
读IO处理流程,Bcache收到读请求后,其处理流程如下:
通过btree查询该读请求对应的数据是否缓存命中,如果缓存命中,直接从SSD缓存中读取对应数据,并返回给上层应用;如果缓存没有命中,发送读请求到后端设备,读取对应数据,返回给上层应用;并且向bcache申请空间,把读取的数据写入缓存设备,更新对应btree;如果缓存部分命中,则把请求分裂成一个读SSD缓存的请求和一个读HDD后备盘的请求,读取完数据,合并后返回给上层应用;并且向bcache申请空间,把从后备盘读取的数据写入缓存设备,更新对应btree; 在设计分布式文件系统的本地存储时,我们必须考虑数据的一致性和可靠性。在数据写入的过程中,由于可能存在异常掉电、进程崩溃等突发情况,导致数据还未全部写入成功便结束,bcache处理写入请求虽然能够保证数据的完整性,但是不能保证数据的一致性。虽然硬盘本身可以保证在扇区级别写入的原子性,但是一般文件系统的一个写入请求通常包含多个扇区的数据和元数据更新,无法做到原子写。
常用的解决办法是引入日志系统,数据写入磁盘之前先写到日志系统,然后再将数据落盘;日志写入成功后,即便写数据时出现异常,也可以通过日志回放重新写入这部分数据;如果写日志的过程中出现异常,则直接放弃这部分日志,视为写入失败即可,以此保证原子写入。但是这种方式导致每份数据都需要在磁盘上写入两次,严重降低了数据的写入效率。
另一种方式则是采用ROW(Redirect on write)的方式,即数据需要覆盖写入时,将数据写到新的位置,然后更新元数据索引,这种方式由于不存在覆盖写,只需保证元数据更新的原子性即可。对于对齐的覆盖写入时,这种方式没有问题,但不能解决非对齐地覆盖写。
比如:某文件的逻辑空间 [0,4096) 区间的数据在磁盘上的物理映射地址为[0,4096),磁盘的物理块(即磁盘读写的最小单元)大小为4096;如果要覆盖写文件[0,4096)区间的数据,那使用ROW的方式没有问题,重新再磁盘上分配一个新的块写入,然后更新元数据中的映射关系即可;但是如果写文件[512,4096)区域,也就是非对齐的覆盖写时,新分配的块中只有部分数据,旧的物理空间中仍有部分数据有效,这样元数据中需要维护两份索引,而且在读取文件的该块数据时,需要从多块磁盘块中读取数据,如果多次进行非对齐覆盖写,这种问题将更严重。
解决这种问题办法是使用RMW(Read Modify Write)的方法,即在发生非对齐覆盖写时,先读取旧的数据,更新的数据合并后,对齐写入到磁盘中,从而减少元数据、提高读性能,但这种方式也存在一种缺点,写数据时需要先读数据,存在一定的性能损耗。Filestore,是Bcache最底层的ObjectStore的实现之一。FileStore基于日志的写事务一致性方法,存储服务收到写入请求后,首先把写入请求对应的数据和元数据打包成一条日志,写入日志分区;当日志写入成功后,客户回复写入请求处理成功的响应;后台线程读取并解析写入成功的日志,把日志中写入请求对应的数据写入磁盘,并把相应的元数据更新到对应的KV存储中。当数据更新完成,标记并删除对应的日志,回收日志空间。FileStore的缺点:FileStore通过日志来保证写入请求的事物性,虽然能够保证写入请求的事物性,但是对IO有一倍的写放大效应。特别是对于大块数据写场景,放大效应比较明显,影响了存储的整体性能。
BlueStore是Ceph的存储引擎,是社区版的默认配置,存储服务收到写入请求后,先判断数据为对齐写还是非对齐写;如果是非对齐写,通过查询该对象对应的元数据信息,确认该写入请求为初次写还是覆盖写,如果是覆盖写,需要同步读取非对齐部分数据,结合写入请求数据,合并成一个4k对齐数据;如果是初次写数据,则把对应写入请求数据直接补零成4K对齐数据;通过查询该写入请求对应对象的元数据,确认是否有没有使用的存储空间,如果没有空闲的存储空间,重新分配一块存储空间,并写入对应数据;当数据写入成功后,把相应的元数据以KV形式写入元数据缓存模块,如果写入成功,给客户回复写入请求处理成功的响应;当请求处理成功后,有单独的线程从元数据数据库读取信息,清理覆盖写等场景需要释放的存储空间。BlueStore的缺点,BluStore通过重定向写,较好地解决了写事务的一致性问题,但是在块存储、文件存储场景,有较多的数据覆盖写入请求。对于覆盖写入请求,通过重定向写虽然能够解决写事务的一致性问题,但是增加了数据空间的离散程度,并大大增加了元数据的开销。采用变长extent的空间管理与重定向写的机制来保证写事物的原子性。但是变长的空间管理不仅导致元数据的开销变大,而且在持续覆盖性的场景,因为重定新向写会导致一个对象内的空间越来越离散,进而影响读的性能。
发明内容
为了保证写事物的原子性,同时尽量减少数据的写放大,提升存储性能,本发明提出了一种定长块空间管理与重定向缓存系统结合的本地存储方案:结合存储系统的重定向特性来保障写事物的原子性,同时减少了数据的写放大,提升的存储的性能。
一种数据存储设备,具备高一致性,包括:读写控制单元、重定向缓存单元、存储单元;读写控制单元包括数据写入管理模块、元数据管理模块、日志管理模块、元数据数据库、元数据缓存模块、日志存储模块;元数据管理模块管理元数据库与元数据缓存模块的数据;日志管理模块管理日志存储模块中的数据;重定向缓存单元包括缓存管理模块、SSD缓存盘、索引缓存模块、索引存储模块;索引存储模块用于保存记录索引缓存模块中的索引;缓存管理模块管理SSD缓存盘中的数据;存储单元包括HDD存储管理模块、HDD存储磁盘,HDD存储管理模块管理HDD存储磁盘中的数据;数据写入管理模块收到数据写入请求,元数据管理模块根据写入请求中的数据的键值查询元数据库,获得写入请求中的数据的键值对应的元数据,解析元数据,确认本次写为覆盖写还是初次写,并获取该写入请求对应的磁盘存储位置,以及写入请求中的数据的大小,使用定长块+Bit-map的方式来管理磁盘空间,查询元数据,获得该数据的元数据,确认逻辑块对应的物理块是否存在;如果不存在,为该逻辑块分配一块对应的磁盘物理块,所述定长块支持128k、256k、512k、或1M;缓存管理模块根据写入请求中的数据的大小在SSD缓存盘给写入请求中的数据分配新的缓存空间;缓存管理模块在所分配的缓存空间写入请求中的数据;如果写入请求中的数据是初次写,标记该数据为正常缓存数据;如果写入请求中的数据是覆盖写,对于覆盖写进行重新定向,写入新的位置不覆盖已有数据;标记该数据为临时缓存数据,临时缓存数据不可回收并且不可读;写入缓存空间的数据用缓存映射记录缓存位置,缓存映射的索引包括硬盘偏移,缓存映射的值包括SSD偏移,把缓存映射写入索引缓存模块;日志管理模块把所述缓存映射和本次写入请求相关的元数据一起组成一个日志数据,日志管理模块将所述日志数据写入日志存储模块,然后再把元数据更新到元数据缓存模块,所述日志写入日志存储模块为原子操作;日志数据写入日志存储模块成功后,如果是覆盖写数据,通知重定向缓存单元该数据写事务完成,把临时缓存数据转成缓存数据;数据存储设备返回数据写入成功信息。
可以是,元数据更新到元数据缓存模块时,同时记录最大的日志写入序列号,当元数据缓存模块数据量大于设定值,元数据管理模块将元数据缓存模块的数据写入元数据库,缓存管理模块将索引缓存模块的数据写入索引存储模块,根据序列号将成功写入元数据库的元数据日志清除。
可以是,如果SSD缓存盘空间占有率超过设定值,将缓存映射对应的缓存数据写入HDD存储磁盘,在缓存映射中标记该数据已经成功写入HDD存储磁盘,缓存管理模块释放成功写入HDD存储磁盘的SSD缓存盘空间;所述索引缓存模块采用B+树管理缓存映射数据;所述缓存映射的值还包括SSD编号、SSD偏移;日志写入在日志记录时增加了日志数据的CRC校验;如果元数据中的键值查询不到元数据,判定本次写为初次写,或者查询到的元数据写入位置没有数据,本次写为初次写;所述元数据缓存模块为内存数据缓存模块;所述索引缓存模块是在内存中建立的数据缓存映射索引;元数据包括写入请求关联文件存储在HDD存储磁盘位置以及数据状态的Bit-map,磁盘偏移位置,以及关联文件的大小;所述写入请求中的数据的键值由所述请求关联的文件的名称hash计算获得。
可以是,还包括重启恢复模块;存储装置重新启动后,缓存管理模块读取索引存储模块构建索引缓存模块,重启恢复模块驱动日志管理模块读取元数据日志分区的日志信息;重启恢复模块根据日志信息中的缓存映射构建掉电前的索引缓存模块;重启恢复模块顺序恢复日志中的元数据,构建掉电前的元数据缓存模块。
可以是,还包括数据读取管理模块;数据读取管理模块收到数据读取请求,驱动元数据管理模块根据数据的键值查询,查询元数据缓存模块与元数据数据库,查询读取数据是否存在;如果数据存在,缓存管理模块查询索引缓存模块,如果数据在SSD缓存盘,读取数据给数据读取管理模块,返回读取成功;如果数据不在SSD缓存盘,数据读取管理模块驱动数据存储盘管理模块读取HDD存储磁盘上的数据,数据读取管理模块返回读取数据。
一种数据存储方法,具备高一致性,包括:
步骤1:存储设备接收到数据写入请求;
步骤2:存储设备查询元数据缓存模块与元数据数据库,获得写入请求中的数据的键值对应的元数据,解析元数据,确认本次写为覆盖写还是初次写,并获取该写入请求对应的磁盘存储位置,以及写入请求中的数据的大小;使用定长块+Bit-map的方式来管理磁盘空间,查询元数据,获得该数据的元数据,确认逻辑块对应的物理块是否存在;如果不存在,为该逻辑块分配一块对应的磁盘物理块,所述定长块支持128k、256k、512k、或1M;
步骤3:存储设备根据写入请求中的数据的大小在SSD缓存盘给写入请求中的数据分配缓存空间;
步骤41:如果写入请求中的数据是初次写,存储设备在SSD缓存盘写入请求中的数据,标记该数据为正常缓存数据;
步骤42:如果写入请求中的数据是覆盖写,对于覆盖写进行重新定向,写入新的位置不覆盖已有数据;标记该数据为临时缓存数据,临时缓存数据不可回收并且不可读;
步骤5:写入缓存空间的数据用缓存映射记录缓存位置,缓存映射的索引包括硬盘偏移,缓存映射的值包括SSD偏移,把缓存映射写入索引缓存模块;存储设备将本次写入请求相关的元数据和缓存映射组成一个日志数据,将所述日志写入日志存储模块,所述日志写入日志存储模块为原子操作;元数据包括数据存储在HDD存储磁盘位置的状态信息,磁盘存储位置,以及写入请求中的数据的大小;
步骤6:所述日志写成功后,把元数据更新到元数据缓存模块,同时记录最大的日志写入序列号;
步骤7:日志写入日志存储模块成功后,如果是覆盖写数据,清除临时缓存数据标记,把临时缓存数据转成缓存数据;
步骤8:存储设备返回数据写入成功信息。
可以是,还包括:步骤W1:存储设备将元数据缓存模块的数据写入元数据库,将索引缓存模块的数据写入索引存储模块;步骤W2:存储设备根据写入元数据库的序列号将对应元数据日志清除;步骤W3:如果SSD缓存盘空间占有率超过设定值,将缓存映射对应的缓存数据写入HDD存储磁盘,在缓存映射中标记该数据已经成功写入HDD存储磁盘,缓存管理模块释放成功写入HDD存储磁盘的SSD缓存盘空间;所述索引缓存模块采用B+树管理缓存映射数据;所述缓存映射的值值还包括SSD编号;所述元数据包括写入请求关联文件存储在HDD存储磁盘位置以及数据状态的Bit-map,磁盘偏移位置,以及关联文件的大小;日志写入在日志记录时增加了日志数据的CRC校验(CRC校验能够保证写入日志为原子操作,写入不成功,CRC校验会不正确);如果元数据中的键值查询不到元数据,判定本次写为初次写,或者查询到的元数据写入位置没有数据,本次写为初次写(解析元数据,判断覆盖写还是初次写方法);所述元数据缓存模块为内存数据缓存模块;所述索引缓存模块为内存数据缓存模块;所述写入请求中的数据的键值由写入请求中的数据关联文件的名称hash计算获得。
可以是,还包括:步骤R1:存储设备接收到读数据请求;步骤R2:查询元数据缓存模块与元数据数据库,查询读取数据是否存在;步骤R31:如果数据存在,缓存管理模块查询索引缓存模块,如果数据在SSD缓存盘,读取数据给数据读取管理模块,返回读取成功;步骤R32:如果数据不在SSD缓存盘,数据读取管理模块驱动数据存储盘管理模块读取HDD存储磁盘上的数据,数据读取管理模块返回读取数据。
根据上述数据存储方法,存储设备重新启动,还包括:
步骤C1:存储设备读取元数据日志分区的日志信息;
步骤C2:存储设备读取索引存储模块构建索引缓存模块,存储设备按照日志顺序构建掉电前的索引缓存模块;
步骤C3:存储设备按照日志顺序构建掉电前的元数据缓存模块。
一种分布式数据存储系统,包括:两个以上数据存储设备,所述数据存储设备是上述的数据存储设备。
本申请中技术方案的有益效果是: 日志写入日志存储模块为原子操作,日志写入的数据远远小于写入请求中的数据,通过日志写入的原子操作,保证了数据写入的原子操作,同时不用两次写数据,极大减少了数据写入的操作;当初次写数据写到SSD缓存盘后,还没有持久化到日志分区,数据存储设备掉电;这时候还没有给上层回复写成功,数据存储设备重启后,因为日志分区没有对应的缓存映射,因此也不需要回放对应数据,能够保证原子性;当初次写数据写到SSD缓存盘后,持久化到日志分区,数据存储设备掉电;这时候可能已经回复写成功了,数据存储设备重启后,通过日志分区可以回放缓存数据的缓存映射,回放成功后,数据恢复正常; 当覆盖写数据写到SSD缓存盘后,还没有持久化到日志分区,数据存储设备掉电的场景;这时候还没有给上层回复写成功,数据存储设备重启后,因为日志分区没有对应的缓存映射,因此不会回放对应数据;SSD缓存盘层会在缓存映射回放完校验所以缓存映射,如果该请求对应缓存映射在SSD缓存盘层有记录,会删除对应记录;当覆盖写数据写到SSD缓存盘后,持久化到日志分区,数据存储设备掉电;这时候可能已经回复写成功了,数据存储设备重启后,通过日志分区可以回放该临时缓存数据的缓存映射,回放后,SSD缓存盘层会把该临时缓存数据转为正常缓存数据,数据恢复正常;对于重复写的数据,在写数据流程还没有成功完成的时候,缓存数据标识的是临时数据,读不出临时数据,可以对读数据流程挂起等待写数据流程完成,也可以采取返回历史数据,本发明通过把Cache移植到用户态,把Store 和 用户态Cache 结合起来,利用Cache的重定向写功能,来实现写事务的原子性,并减少了写Journal带来的数据写放大问题,主要优化流程如下;Store层收到写入请求后,区分该请求是新写数据还是覆盖写数据,store层通知cache 层分配对应的缓存空间,并表示该写数据为初次写数据还是覆盖写数据;如果是覆盖写数据,携带标识,通知重定向缓存单元该请求为覆盖写入请求,重定向缓存单元为其分配一个新的缓存空间,把数据写入缓存空间后,再更新元数据,元数据更新成功后,再通知重定向缓存单元对应数据可以刷盘;本发明基于定长块的磁盘空间管理,并结合基于重定向的缓存处理模块,在保障了写IO的事务性的同时,减少了元数据开销。
附图说明
图1是一种数据存储设备实施例写数据的系统框架示意图;
图2是一种数据存储设备实施例数据落盘的系统框架示意图;
图3是一种数据存储设备实施例读数据的系统框架示意图;
图4是一种数据存储设备实施例设备重启动恢复的系统框架示意图;
图5是一种数据存储方法实施例写数据的流程示意图;
图6是一种缓存数据盘转存到数据存储盘实施例的流程示意图;
图7是一种存储设备接处理读数据请求实施例的流程示意图;
图8是一种存储设备重新启动实施例的流程示意图;
图9是Bcache软件与SSD盘和HDD盘的关系示意图;
图10一种元数据实施例示意图;
图11一种缓存映射实施例示意图;
图12一种日志数据实施例示意图;
图13定长块+Bit-map磁盘空间管理示意图;
图14一种分布式数据存储系统实施例示意框图。
具体实施方式
以下结合各附图对本申请内容做进一步详述。需要说明的是,以下是本发明较佳实施例的说明,并不对本发明构成任何限制。本发明较佳实施例的说明只是作为本发明一般原理的说明。
如图1,一种数据存储设备实施例写数据的系统框架示意图,具备高一致性,包括:读写控制单元、重定向缓存单元、存储单元;读写控制单元包括数据写入管理模块、元数据管理模块、日志管理模块、元数据数据库、元数据缓存模块、日志存储模块;元数据管理模块管理元数据库与元数据缓存模块的数据;日志管理模块管理日志存储模块中的数据;重定向缓存单元包括缓存管理模块、SSD缓存盘、索引缓存模块、索引存储模块;索引存储模块用于保存记录索引缓存模块中的索引;缓存管理模块管理SSD缓存盘中的数据;存储单元包括HDD存储管理模块、HDD存储磁盘,HDD存储管理模块管理HDD存储磁盘中的数据;数据写入管理模块收到数据写入请求,元数据管理模块根据写入请求中的数据的键值查询元数据库,获得写入请求中的数据的键值对应的元数据,解析元数据,确认本次写为覆盖写还是初次写,并获取该写入请求对应的磁盘存储位置,以及写入请求中的数据的大小;缓存管理模块根据数据写入请求中的数据的大小在SSD缓存盘给写入请求中的数据分配新的缓存空间;缓存管理模块在所分配的缓存空间写入请求中的数据;如果写入请求中的数据是初次写,标记该数据为正常缓存数据;如果写入请求中的数据是覆盖写,对于覆盖写进行重新定向,写入新的位置不覆盖已有数据;标记该数据为临时缓存数据,临时缓存数据不可回收并且不可读;如图11,写入缓存空间的数据用缓存映射记录缓存位置,缓存映射的索引包括硬盘偏移,缓存映射的值包括SSD偏移,把缓存映射写入索引缓存模块;日志管理模块把所述缓存映射和本次写入请求相关的元数据一起组成一个日志数据,日志管理模块将所述日志数据写入日志存储模块,然后再把元数据更新到元数据缓存模块,所述日志写入日志存储模块为原子操作;日志数据写入日志存储模块成功后,如果是覆盖写数据,通知重定向缓存单元该数据写事务完成,把临时缓存数据转成缓存数据;数据存储设备返回数据写入成功信息。
日志写入日志存储模块为原子操作,日志写入的数据远远小于写入请求中的数据,通过日志写入的原子操作,保证了数据写入的原子操作,同时不用两次写数据,极大减少了数据写入的操作。写入的数据可以是文件数据,区块数据等各种形式的数据。上层应用的时候,比如存储一个1G的高清电影,可以将电影分成1000个文件,分别用“电影0001”到“电影1000”来命名,对1000个分片,用写入请求写入到读写控制单元,进一步,可以采用hash算法,对1000个分片进行运算,得到系统唯一的命名编号,元数据的键值可以用所述唯一的命名编号进行映射得出。
当数据写入管理模块收到写入请求事务后,先确认该请求为初次写还是覆盖写入请求,把数据写入请求提交给重定向缓存单元的同时,通过标识通知重定向缓存单元该数据为初次写还是覆盖写;重定向缓存单元收到写入请求后,先为该请求在SSD上分配一个缓存空间,数据写成功后,区分覆盖写和初次写,如果是初次写,标记该数据为正常缓存数据,如果是覆盖写,标记该数据为临时缓存数据(不可回收&不可读),并生成对应的数据缓存映射返回给读写控制单元;读写控制单元收到重定向缓存单元数据写成功的回调后,把重定向缓存单元返回的缓存映射和其他元数据一起组成一条日志,持久化到日志分区中,然后再把元数据更新到元数据缓存模块的内存中;持久化到日志分区成功后,如果是覆盖写数据,通知重定向缓存单元该数据写事务完成,把临时缓存数据转成正常缓存数据;然后给读写控制单元返回写入请求处理成功的响应。
当初次写数据写到SSD缓存盘后,还没有持久化到日志分区,数据存储设备掉电;这时候还没有给上层回复写成功,数据存储设备重启后,因为日志分区没有对应的缓存映射,因此也不需要回放对应数据,能够保证原子性;当初次写数据写到SSD缓存盘后,持久化到日志分区,数据存储设备掉电;这时候可能已经回复写成功了,数据存储设备重启后,通过日志分区可以回放缓存数据的缓存映射,回放成功后,数据恢复正常;当覆盖写数据写到SSD缓存盘后,还没有持久化到日志分区,数据存储设备掉电的场景;这时候还没有给上层回复写成功,数据存储设备重启后,因为日志分区没有对应的缓存映射,因此不会回放对应数据;SSD缓存盘层会在缓存映射回放完校验所以缓存映射,如果该请求对应缓存映射在SSD缓存盘层有记录,会删除对应记录;当覆盖写数据写到SSD缓存盘后,持久化到日志分区,数据存储设备掉电;这时候可能已经回复写成功了,数据存储设备重启后,通过日志分区可以回放该临时缓存数据的缓存映射,回放后,SSD缓存盘层会把该临时缓存数据转为正常缓存数据,数据恢复正常;
一种实施例中,元数据更新到元数据缓存模块时,同时记录最大的日志写入序列号,当元数据缓存模块数据量大于设定值,元数据管理模块将元数据缓存模块的数据写入元数据库,缓存管理模块将索引缓存模块的数据写入索引存储模块,根据序列号将成功写入元数据库的元数据日志清除;日志写入在日志记录时增加了日志数据的CRC校验,CRC校验能够保证写入日志为原子操作,写入不成功,CRC校验会不正确;如果元数据中的键值查询不到元数据,判定本次写为初次写,或者查询到的元数据写入位置没有数据,本次写为初次写;所述元数据缓存模块为内存数据缓存模块;所述索引缓存模块为内存数据缓存模块;元数据包括写入请求关联文件存储在HDD存储磁盘位置以及数据状态的Bit-map,磁盘偏移位置,以及关联文件的大小;所述写入请求中的数据的键值由所述请求关联的文件的名称hash计算获得。
一种实施例中,可以基于开源软件Bcache进行改写与扩展,可以快速实现重定向缓存单元与存储单元的功能,需全新开发读写控制单元功能;通过把Bcache移植到用户态,利用Bcache的重定向写功能,来实现写事务的原子性,并减少了写数据过程带来的数据写放大问题,收到写入请求后,区分该请求是新写数据还是覆盖写数据,分配对应的缓存空间,并标识该写数据为初次写数据还是覆盖写数据;如果是覆盖写数据,携带标识,通知重定向缓存单元该请求为覆盖写入请求,重定向缓存单元为其分配一个新的缓存空间,把数据写入缓存空间后,再更新元数据,元数据更新成功后,再通知重定向缓存单元对应数据可以数据落盘;元数据缓存模块为内存数据库,内存数据库中包括很多条memtable即内存数据库表单中,有一个key来记录KV元数据所关联的日志最大seq。当日志写完成,给元数据缓存模块同步KV元数据时,会在KV元数据里面增加一个特殊的key来记录该日志项的seq。并且该seq的值会随日志的写入单调递增。当元数据缓存模块中memtable写满,或者收到flush请求,需要把memtable中对应的key持久化到磁盘时,会首先过滤用于记录日志seq号的key,并记录该memtable对应的日志seq的最大值max_seq。当memtable中对应的KV元数据持久化到磁盘,生成了SST文件后,首先会通过缓存模块把内存中的b+树信息持久化到磁盘中,然后KV元数据模块把本次持久化的memtable所对应的max_seq通知给日志模块,触发日志模块回收日志分区中seq小于max_seq的日志项,记录已经flush的seq号为max_seq,并释放对应的日志空间。
如图2,如果SSD缓存盘空间占有率超过设定值,将缓存映射对应的缓存数据写入HDD存储磁盘,在缓存映射中标记该数据已经成功写入HDD存储磁盘,缓存管理模块释放成功写入HDD存储磁盘的SSD缓存盘空间;所述索引缓存模块采用B+树管理缓存映射数据;所述缓存映射的值还包括SSD编号、SSD偏移。
如果使用定长块+Bit-map的方式来管理磁盘空间,定长块方式能够大大减少存储的元数据开销。但是由于定长块的存储管理,对写IO均采取原地覆盖的方式,这样导致无法保证写事物的原子性。定长块支持128k、256k、512k、1M多种类型。
如图13定长块+Bit-map磁盘空间管理示意图,一个大小为10M的存储对象,包括10个块,每个块的大小为1M,其逻辑空间对应有10个逻辑块,‘▇’代表其对应的逻辑块分配了相应的物理块,空白代表了该逻辑块没有分配物理块。
如图10,当数据存储设备接收到一个写入请求后,结合写入请求中的写入请求中的数据对象的唯一的命名编号,唯一的命名编号与硬盘偏移映射,和length先查询元数据,获得该数据的元数据即Value值,确认该逻辑块对应的物理块是否存在;如果不存在,则首先为该逻辑块分配一块对应的物理块。当分配成功后,结合写入请求的唯一的命名编号,计算出该写入请求所处理的数据在物理磁盘上的对应偏移。并把写入请求对应的数据写入该磁盘偏移位置。图10中Value值包括磁盘偏移,数据大小,bitmap。
如图4,还包括重启恢复模块;存储装置重新启动后,缓存管理模块读取索引存储模块构建索引缓存模块,重启恢复模块驱动日志管理模块读取元数据日志分区的日志信息;重启恢复模块根据日志信息中的缓存映射构建掉电前的索引缓存模块;重启恢复模块日志中的元数据顺序构建掉电前元数据缓存模块。
为了提供写事物性,本发明在本地存储中引用了基于重定向的缓存模块,利用缓存的重定向机制来保证写入请求的事物性。
如图1.重定向缓存单元主要负责IO的写入,SSD缓存空间和缓存数据的管理,以及缓存数据和HDD之间的映射。
当重定向缓存单元收到写入请求后,会先从SSD分配一块缓存空间用于写入请求中的数据,写入成功后会把该缓存对应的缓存映射返回给读写控制单元,读写控制单元把元数据和缓存数据产生的缓存映射一起合并为一个日志项,写入日志分区。 当日志写入成功后,再把元数据同步到元数据缓存模块中。
如图12.日志格式日志分区相关信息,为了提高日志分区的并行处理能力,一个数据存储设备的日志分区会根据系统配置,划分为多个逻辑分片。每个逻辑分片空间独立管理,都有一个头部用于管理相应逻辑分片的空间,记录该逻辑分片的起始、结束偏移,以及有效日志的日志序列号,逻辑分片用于对应计算机操作系统的不同任务,多个逻辑分片可以用不同的任务并行处理,提高处理的速度。
每个日志项,包含日志项子头部和缓存映射、元数据。
重定向缓存单元按照数据分区大小把缓存数据的SSD划分成很多数据分区,默认一个数据分区的大小是512k。数据分区内空间是追加分配的,只记录当前分配到多少偏移了,下一次分配的时候从当前记录位置往后分配。数据分区的管理在索引缓存模块中,使用b+树索引,而缓存映射是b+树节点中的关键结构,缓存映射记录缓存设备SSD缓存的数据和后端设备HDD的映射关系。
上层应用给重定向缓存单元发送写入请求时,会标记该写入请求为临时缓存数据还是正常的写数据。
如果是临时缓存数据,对应的写IO处理完成后,所生成的缓存映射会标识该缓存数据为临时缓存数据,这样该缓存数据不会被重定向缓存单元的writeback线程处理,也不能提供读服务,因此不会覆盖原来的旧数据。
当读写控制单元的写入请求事物处理完成后,会发送请求通知重定向缓存单元,把该缓存映射从临时缓存数据变更为正常缓存数据,这样该缓存数据能够提供读服务,也能被writeback线程正常处理,以释放缓存空间。
图4,还包括重启恢复模块;存储装置重新启动后,缓存管理模块读取索引存储模块构建索引缓存模块,重启恢复模块驱动日志管理模块读取元数据日志分区的日志信息;重启恢复模块根据日志信息中的缓存映射构建掉电前的索引缓存模块;重启恢复模块顺序恢复日志中的元数据,构建掉电前的元数据缓存模块。
读取日志分区,确认需要重放日志的最小序列号,遍历所有需要回放的日志,找出并按顺序回放所有缓存映射,当缓存映射回放完成后,通知重定向缓存单元可以启动gc、allocate、writeback线程,以支持后续新IO的写入;
在缓存映射回放过程中,如果插入的缓存映射对应的数据为临时缓存数据,重定向缓存单元需要把这种数据转成正常的缓存数据;重定向缓存单元缓存映射回放完成后,需要加载元数据库,重新遍历所需回放的日志,并按照日志顺序,把所有元数据重新插入元数据库;当日志项回放完成后,初始化缓存模块,通过读取缓存盘的信息,完成缓存模块的初始化以及缓存映射 相关b+树的重建。
如图3,还包括数据读取管理模块;数据读取管理模块收到数据读取请求,驱动元数据管理模块根据数据的键值查询,查询元数据缓存模块与元数据数据库,查询读取数据是否存在;如果数据存在,缓存管理模块查询索引缓存模块,如果数据在SSD缓存盘,读取数据给数据读取管理模块,返回读取成功;如果数据不在SSD缓存盘,数据读取管理模块驱动数据存储盘管理模块读取HDD存储磁盘上的数据,数据读取管理模块返回读取数据。
对于重复写的数据,在写数据流程还没有成功完成的时候,缓存数据标识的是临时数据,读不出临时数据,可以对读数据流程挂起等待写数据流程完成,也可以采取返回历史数据,这可以根据业务进行配置调整。
如图5,一种数据存储方法,具备高一致性,其特征包括:步骤1:存储设备接收到数据写入请求;步骤2:存储设备查询元数据缓存模块与元数据数据库,获得写入请求中的数据的键值对应的元数据,解析元数据,确认本次写为覆盖写还是初次写,并获取该写入请求对应的磁盘存储位置,以及写入请求中的数据的大小;步骤3:存储设备根据写入请求中的数据的大小在SSD缓存盘给写入请求中的数据分配缓存空间;步骤41:如果写入请求中的数据是初次写,存储设备在SSD缓存盘写入请求中的数据,标记该数据为正常缓存数据;步骤42:如果写入请求中的数据是覆盖写,对于覆盖写进行重新定向,写入新的位置不覆盖已有数据;标记该数据为临时缓存数据,临时缓存数据不可回收并且不可读;步骤5:写入缓存空间的数据用缓存映射记录缓存位置,缓存映射的索引包括硬盘偏移,缓存映射的值包括SSD偏移,把缓存映射写入索引缓存模块;存储设备将本次写入请求相关的元数据和缓存映射组成一个日志数据,将所述日志写入日志存储模块,所述日志写入日志存储模块为原子操作;元数据包括数据存储在HDD存储磁盘位置的状态信息,磁盘存储位置,以及写入请求中的数据的大小;步骤6:所述日志写成功后,把元数据更新到元数据缓存模块,同时记录最大的日志写入序列号;步骤7:日志写入日志存储模块成功后,如果是覆盖写数据,清除临时缓存数据标记,把临时缓存数据转成缓存数据;步骤8:存储设备返回数据写入成功信息。
如图6,还包括数据落盘程序:步骤W1:存储设备将元数据缓存模块的数据写入元数据库,将索引缓存模块的数据写入索引存储模块;步骤W2:存储设备根据写入元数据库的序列号将对应元数据日志清除;步骤W3:如果SSD缓存盘空间占有率超过设定值,将缓存映射对应的缓存数据写入HDD存储磁盘,在缓存映射中标记该数据已经成功写入HDD存储磁盘,缓存管理模块释放成功写入HDD存储磁盘的SSD缓存盘空间;所述索引缓存模块采用B+树管理缓存映射数据;所述缓存映射的值值还包括SSD编号;所述元数据包括写入请求关联文件存储在HDD存储磁盘位置以及数据状态的Bit-map,磁盘偏移位置,以及关联文件的大小;日志写入在日志记录时增加了日志数据的CRC校验(CRC校验能够保证写入日志为原子操作,写入不成功,CRC校验会不正确);如果元数据中的键值查询不到元数据,判定本次写为初次写,或者查询到的元数据写入位置没有数据,本次写为初次写(解析元数据,判断覆盖写还是初次写方法);所述元数据缓存模块为内存数据缓存模块;所述索引缓存模块为内存数据缓存模块;所述写入请求中的数据的键值由写入请求中的数据关联的文件的名称hash计算获得。
如图7,还包括读数据程序,读数据程序可以独立运行。步骤R1:存储设备接收到读数据请求;步骤R2:查询元数据缓存模块与元数据数据库,查询读取数据是否存在;步骤R31:如果数据存在,缓存管理模块查询索引缓存模块,如果数据在SSD缓存盘,读取数据给数据读取管理模块,返回读取成功;步骤R32:如果数据不在SSD缓存盘,数据读取管理模块驱动数据存储盘管理模块读取HDD存储磁盘上的数据,数据读取管理模块返回读取数据。
如图8,设备启动运行包括重启动恢复程序,包括:步骤C1:存储设备读取元数据日志分区的日志信息;步骤C2:存储设备读取索引存储模块构建索引缓存模块,存储设备按照日志顺序构建掉电前的索引缓存模块;步骤C3:存储设备按照日志顺序构建掉电前的元数据缓存模块。
如图14,一种分布式数据存储系统,包括上述任意一项数据存储设备,数据存储设备的数量在两个以上。
本发明虽然根据优选实施例和若干备选方案进行说明和描述,但发明不会被在本说明书中的特定描述所限制。其他另外的替代或等同组件也可以用于实践本发明。

Claims (10)

1.一 种数据存储设备,具备高一致性,其特征包括:读写控制单元、重定向缓存单元、存储单元;
读写控制单元包括数据写入管理模块、元数据管理模块、日志管理模块、元数据数据库、元数据缓存模块、日志存储模块;元数据管理模块管理元数据库与元数据缓存模块的数据;日志管理模块管理日志存储模块中的数据;
重定向缓存单元包括缓存管理模块、SSD缓存盘、索引缓存模块、索引存储模块;索引存储模块用于保存记录索引缓存模块中的索引;缓存管理模块管理SSD缓存盘中的数据;
存储单元包括HDD存储管理模块、HDD存储磁盘,HDD存储管理模块管理HDD存储磁盘中的数据;
数据写入管理模块收到数据写入请求,元数据管理模块根据写入请求中的数据的键值查询元数据库,获得写入请求中的数据的键值对应的元数据,解析元数据,确认本次写为覆盖写还是初次写,并获取该写入请求对应的磁盘存储位置,以及写入请求中的数据的大小;使用定长块+Bit-map的方式来管理磁盘空间,查询元数据,获得该数据的元数据,确认逻辑块对应的物理块是否存在;如果不存在,为该逻辑块分配一块对应的磁盘物理块,所述定长块支持128k、256k、512k或1M;
缓存管理模块根据写入请求中的数据的大小在SSD缓存盘给写入请求中的数据分配新的缓存空间;缓存管理模块在所分配的缓存空间写入请求中的数据;如果写入请求中的数据是初次写,标记该数据为正常缓存数据;如果写入请求中的数据是覆盖写,对于覆盖写进行重新定向,写入新的位置不覆盖已有数据;标记该数据为临时缓存数据,临时缓存数据不可回收并且不可读;写入缓存空间的数据用缓存映射记录缓存位置,缓存映射的索引包括硬盘偏移,缓存映射的值包括SSD偏移,把缓存映射写入索引缓存模块;
日志管理模块把所述缓存映射和本次写入请求相关的元数据一起组成一个日志数据,日志管理模块将所述日志数据写入日志存储模块,然后再把元数据更新到元数据缓存模块,所述日志写入日志存储模块为原子操作;
日志数据写入日志存储模块成功后,如果是覆盖写数据,通知重定向缓存单元该数据写事务完成,把临时缓存数据转成缓存数据;数据存储设备返回数据写入成功信息。
2.根据权利要求1所述的数据存储设备,其特征在于,元数据更新到元数据缓存模块时,同时记录最大的日志写入序列号,当元数据缓存模块数据量大于设定值,元数据管理模块将元数据缓存模块的数据写入元数据库,缓存管理模块将索引缓存模块的数据写入索引存储模块,根据序列号将成功写入元数据库的元数据日志清除。
3.根据权利要求2所述的数据存储设备,其特征在于,如果SSD缓存盘空间占有率超过设定值,将缓存映射对应的缓存数据写入HDD存储磁盘,在缓存映射中标记该数据已经成功写入HDD存储磁盘,缓存管理模块释放成功写入HDD存储磁盘的SSD缓存盘空间;所述索引缓存模块采用B+树管理缓存映射数据;所述缓存映射的值还包括SSD编号、SSD偏移;日志写入在日志记录时增加了日志数据的CRC校验;如果元数据中的键值查询不到元数据,判定本次写为初次写,或者查询到的元数据写入位置没有数据,本次写为初次写;所述元数据缓存模块为内存数据缓存模块;所述索引缓存模块是在内存中建立的数据缓存映射索引;元数据包括写入请求关联文件存储在HDD存储磁盘位置以及数据状态的Bit-map,磁盘偏移位置,以及关联文件的大小;所述写入请求中的数据的键值由所述请求关联的文件的名称hash计算获得。
4.根据权利要求2所述的数据存储设备,其特征在于,还包括重启恢复模块;存储装置重新启动后,缓存管理模块读取索引存储模块构建索引缓存模块,重启恢复模块驱动日志管理模块读取元数据日志分区的日志信息;重启恢复模块根据日志信息中的缓存映射构建掉电前的索引缓存模块;重启恢复模块顺序恢复日志中的元数据,构建掉电前的元数据缓存模块。
5.根据权利要求2所述的数据存储设备,其特征在于,还包括数据读取管理模块;数据读取管理模块收到数据读取请求,驱动元数据管理模块根据数据的键值查询,查询元数据缓存模块与元数据数据库,查询读取数据是否存在;如果数据存在,缓存管理模块查询索引缓存模块,如果数据在SSD缓存盘,读取数据给数据读取管理模块,返回读取成功;如果数据不在SSD缓存盘,数据读取管理模块驱动数据存储盘管理模块读取HDD存储磁盘上的数据,数据读取管理模块返回读取数据。
6.一种数据存储方法,具备高一致性,其特征包括:
步骤1:存储设备接收到数据写入请求;
步骤2:存储设备查询元数据缓存模块与元数据数据库,获得写入请求中的数据的键值对应的元数据,解析元数据,确认本次写为覆盖写还是初次写,并获取该写入请求对应的磁盘存储位置,以及写入请求中的数据的大小;使用定长块+Bit-map的方式来管理磁盘空间,查询元数据,获得该数据的元数据,确认逻辑块对应的物理块是否存在;如果不存在,为该逻辑块分配一块对应的磁盘物理块,所述定长块支持128k、256k、512k或1M;
步骤3:存储设备根据写入请求中的数据的大小在SSD缓存盘给写入请求中的数据分配缓存空间;
步骤41:如果写入请求中的数据是初次写,存储设备在SSD缓存盘写入请求中的数据,标记该数据为正常缓存数据;
步骤42:如果写入请求中的数据是覆盖写,对于覆盖写进行重新定向,写入新的位置不覆盖已有数据;标记该数据为临时缓存数据,临时缓存数据不可回收并且不可读;
步骤5:写入缓存空间的数据用缓存映射记录缓存位置,缓存映射的索引包括硬盘偏移,缓存映射的值包括SSD偏移,把缓存映射写入索引缓存模块;存储设备将本次写入请求相关的元数据和缓存映射组成一个日志数据,将所述日志写入日志存储模块,所述日志写入日志存储模块为原子操作;元数据包括数据存储在HDD存储磁盘位置的状态信息,磁盘存储位置,以及写入请求中的数据的大小;
步骤6:所述日志写成功后,把元数据更新到元数据缓存模块,同时记录最大的日志写入序列号;
步骤7:日志写入日志存储模块成功后,如果是覆盖写数据,清除临时缓存数据标记,把临时缓存数据转成缓存数据;
步骤8:存储设备返回数据写入成功信息。
7.根据权利要求6所述数据存储方法,其特征在于,还包括:
步骤W1:存储设备将元数据缓存模块的数据写入元数据数据库,将索引缓存模块的数据写入索引存储模块;
步骤W2:存储设备根据写入元数据数据库的序列号将对应元数据日志清除;
步骤W3:如果SSD缓存盘空间占有率超过设定值,将缓存映射对应的缓存数据写入HDD存储磁盘,在缓存映射中标记该数据已经成功写入HDD存储磁盘,缓存管理模块释放成功写入HDD存储磁盘的SSD缓存盘空间;
所述索引缓存模块采用B+树管理缓存映射数据;所述缓存映射的值还包括SSD编号;所述元数据包括写入请求关联文件存储在HDD存储磁盘位置以及数据状态的Bit-map,磁盘偏移位置,以及关联文件的大小;日志写入在日志记录时增加了日志数据的CRC校验;如果元数据中的键值查询不到元数据,判定本次写为初次写,或者查询到的元数据写入位置没有数据,本次写为初次写;所述元数据缓存模块为内存数据缓存模块;所述索引缓存模块为内存数据缓存模块;所述写入请求中的数据的键值由写入请求中的数据关联文件的名称hash计算获得。
8.根据权利要求6所述数据存储方法,其特征在于,还包括:
步骤R1:存储设备接收到读数据请求;
步骤R2:查询元数据缓存模块与元数据数据库,查询读取数据是否存在;
步骤R31:如果数据存在,缓存管理模块查询索引缓存模块,如果数据在SSD缓存盘,读取数据给数据读取管理模块,返回读取成功;
步骤R32:如果数据不在SSD缓存盘,数据读取管理模块驱动数据存储盘管理模块读取HDD存储磁盘上的数据,数据读取管理模块返回读取数据。
9.根据权利要求6所述数据存储方法,其特征在于,存储设备重新启动,还包括:
步骤C1:存储设备读取元数据日志分区的日志信息;
步骤C2:存储设备读取索引存储模块构建索引缓存模块,存储设备按照日志顺序构建掉电前的索引缓存模块;
步骤C3:存储设备按照日志顺序构建掉电前的元数据缓存模块。
10.一种分布式数据存储系统,其特征包括:包括两个以上数据存储设备,所述数据存储设备是权利要求1至权利要求5任意一项所述的数据存储设备。
CN202111467385.9A 2021-12-03 2021-12-03 一种数据存储设备、方法与分布式数据存储系统 Active CN113868192B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111467385.9A CN113868192B (zh) 2021-12-03 2021-12-03 一种数据存储设备、方法与分布式数据存储系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111467385.9A CN113868192B (zh) 2021-12-03 2021-12-03 一种数据存储设备、方法与分布式数据存储系统

Publications (2)

Publication Number Publication Date
CN113868192A CN113868192A (zh) 2021-12-31
CN113868192B true CN113868192B (zh) 2022-04-08

Family

ID=78985779

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111467385.9A Active CN113868192B (zh) 2021-12-03 2021-12-03 一种数据存储设备、方法与分布式数据存储系统

Country Status (1)

Country Link
CN (1) CN113868192B (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114415976B (zh) * 2022-03-28 2022-07-01 深圳市杉岩数据技术有限公司 一种分布式数据存储系统与方法
CN114579529B (zh) * 2022-05-07 2022-08-05 深圳市杉岩数据技术有限公司 一种基于重定向和日志混合的本地存储方法及系统
CN114706536B (zh) * 2022-05-27 2022-11-11 阿里巴巴(中国)有限公司 一种元数据管理方法、装置、电子设备及可读存储介质
CN115756334A (zh) * 2022-11-30 2023-03-07 天翼云科技有限公司 一种基于大规模存储系统的数据处理方法及装置
CN117056245B (zh) * 2023-08-18 2024-02-23 武汉麓谷科技有限公司 一种基于zns固态硬盘的面向日志记录应用的数据组织方法
CN116932655B (zh) * 2023-09-18 2023-11-24 成都市杉岩科技有限公司 一种分布式键值数据库操作方法及计算机可读存储介质
CN117348809B (zh) * 2023-10-08 2024-09-10 中电云计算技术有限公司 一种基于日志写的读缓存方法和系统
CN117519612B (zh) * 2024-01-06 2024-04-12 深圳市杉岩数据技术有限公司 基于索引在线拼接的海量小文件存储系统与方法
CN117707437B (zh) * 2024-02-06 2024-06-21 济南浪潮数据技术有限公司 基于分布式存储系统的虚拟磁盘存储方法及装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103678169A (zh) * 2013-11-11 2014-03-26 华中科技大学 一种高效利用固态盘缓存的方法和系统
CN113312300A (zh) * 2021-06-17 2021-08-27 上海天玑科技股份有限公司 一种融合数据传输和存储的非易失内存缓存方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011031796A2 (en) * 2009-09-08 2011-03-17 Fusion-Io, Inc. Apparatus, system, and method for caching data on a solid-state storage device
US9164887B2 (en) * 2011-12-05 2015-10-20 Industrial Technology Research Institute Power-failure recovery device and method for flash memory
CN104881371B (zh) * 2015-05-29 2018-02-09 清华大学 持久性内存事务处理缓存管理方法与装置
CN111209253B (zh) * 2019-12-30 2023-10-24 河南创新科信息技术有限公司 分布式存储设备性能提升方法、装置及分布式存储设备
CN113448490A (zh) * 2020-03-25 2021-09-28 伊姆西Ip控股有限责任公司 用于存储的方法、设备和计算机程序产品

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103678169A (zh) * 2013-11-11 2014-03-26 华中科技大学 一种高效利用固态盘缓存的方法和系统
CN113312300A (zh) * 2021-06-17 2021-08-27 上海天玑科技股份有限公司 一种融合数据传输和存储的非易失内存缓存方法

Also Published As

Publication number Publication date
CN113868192A (zh) 2021-12-31

Similar Documents

Publication Publication Date Title
CN113868192B (zh) 一种数据存储设备、方法与分布式数据存储系统
US9946460B2 (en) Storage subsystem and storage system architecture performing storage virtualization and method thereof
JP4199993B2 (ja) スナップショット取得方法
US6269431B1 (en) Virtual storage and block level direct access of secondary storage for recovery of backup data
US5193184A (en) Deleted data file space release system for a dynamically mapped virtual data storage subsystem
US6353878B1 (en) Remote control of backup media in a secondary storage subsystem through access to a primary storage subsystem
US6366987B1 (en) Computer data storage physical backup and logical restore
US7035881B2 (en) Organization of read-write snapshot copies in a data storage system
JP4104586B2 (ja) ファイル管理機能を備えたファイルシステム及びファイル管理方法
US7849254B2 (en) Create virtual track buffers in NVS using customer segments to maintain newly written data across a power loss
US20110022811A1 (en) Information backup/restoration processing apparatus and information backup/restoration processing system
US7877554B2 (en) Method and system for block reallocation
US20070174569A1 (en) Method of managing data snapshot images in a storage system
JP4884041B2 (ja) 自動拡張可能なボリュームに対して最適なi/oコマンドを発行するストレージシステム及びその制御方法
JP4561168B2 (ja) データ処理システムおよび方法並びにその処理プログラム
US7899989B2 (en) Method and system for using a block allocation policy
US20070106868A1 (en) Method and system for latency-directed block allocation
CN111913664B (zh) 一种数据写入方法及装置
US7930495B2 (en) Method and system for dirty time log directed resilvering
US20180307615A1 (en) Storage control apparatus and storage control method
US20050223180A1 (en) Accelerating the execution of I/O operations in a storage system
US7925827B2 (en) Method and system for dirty time logging
JP2002055784A (ja) フォールトトレラントの記憶装置にデータを記憶するための方法、ならびにそのための記憶装置およびコントローラ
KR101968474B1 (ko) 플래시 캐시에서 트랜잭션 지원 방법 및 장치
US8938594B2 (en) Method and system for metadata-based resilvering

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant