发明内容
基于此,有必要提供一种能够提高存储效率的数据存储方法。
一种数据存储方法,包括:
接收上传的分片数据,提取所述分片数据的数据标识;
获取存储节点的存储状态,根据所述存储状态选取存储节点,根据所述数据标识向存储节点请求分配存储空间;
接收所述存储节点返回的与所述数据标识对应的存储地址标识,所述存储地址标识与存储节点为所述数据标识分配的存储单元上的偏移位置对应;
将所述分片数据发送至所述存储地址标识对应的存储位置进行存储。
此外,还有必要提供一种能够提高存储效率的数据存储装置。
一种数据存储装置,包括:
数据接收模块,用于接收上传的分片数据,提取所述分片数据的数据标识;
存储节点选择模块,用于获取存储节点的存储状态,根据所述存储状态选取存储节点,根据所述数据标识向存储节点请求分配存储空间;
存储地址获取模块,用于接收所述存储节点返回的与所述数据标识对应的存储地址标识,所述存储地址标识与存储节点为所述数据标识分配的存储单元上的偏移位置对应;
数据存储模块,用于将所述分片数据发送至所述存储地址标识对应的存储位置进行存储。
此外,还有必要提供一种能够提高存储效率的数据存储系统。
一种数据存储系统,包括门面节点和存储节点,其中:
门面节点用于接收上传的分片数据,获取存储节点的存储状态,根据所述存储状态选取存储节点,向所述存储节点发送存储空间分配请求;
存储节点用于为所述存储空间分配请求分配存储单元,并获取所述存储单元上的空闲的存储位置的偏移量,根据所述分配的存储单元和偏移量生成存储地址标识,返回所述门面节点。
门面节点用于将所述分片数据发送至所述存储地址标识对应的存储节点;
存储节点用于根据所述存储地址标识存储所述分片数据。
此外,还有必要提供一种能够提高存储效率的数据存储方法。
一种数据存储方法,包括:
门面节点接收上传的分片数据,获取存储节点的存储状态,根据所述存储状态选取存储节点,向所述存储节点发送存储空间分配请求;
存储节点用于为所述存储空间分配请求分配存储单元,并获取所述存储单元上的空闲的存储位置的偏移量,根据所述分配的存储单元和偏移量生成存储地址标识,返回所述门面节点。
所述门面节点将所述分片数据发送至所述存储地址标识对应的存储节点;
所述存储节点根据所述存储地址标识存储所述分片数据。
上述数据存储方法及装置中,门面节点在选择存储节点时,根据存储节点的存储状态进行选择,也就是说总是会选择存储速度较快的或剩余存储空间较大的存储节点进行存储,使得存储效率得到提高。
同时,由于同一时间存储节点的存储状态不会发生突发性的改变,使得在存储大文件的多个连续的分片数据时,通常会存储在同一个存储节点上,因此在存储节点搬迁或存储节点上的数据进行迁移时,涉及到的关联的存储节点的数量较小,从而降低了搬迁成本。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
具体的,在本实施例中,为了能够提高存储效率,特提出了一种数据存储方法,该方法的实现可依赖计算机程序,可运行于基于冯诺依曼体系的计算机系统上。如图1所示,该计算机系统可以是图2所示的文件管理系统中的门面节点。
图1展示了一种文件管理系统,包括门面节点10和存储节点20,可提供数据存储和数据下载服务。门面节点10可与终端30连接,终端30可向门面节点10上传文件或下载文件。门面节点10则将终端30上传的数据转发至存储节点20。存储节点20包含有多个存储单元,如图1中存储节点24包含存储单元24A至存储单元24C,存储节点可将数据存储在存储单元中。
存储节点20上的存储单元可以是独立的磁盘、磁带或存储服务器硬件实体,也可以是与同一磁盘上的不同存储区域对应的逻辑存储块。例如,在一个应用场景中,可以独立的磁盘(例如1TB大小的硬盘)作为存储单元,每块磁盘即为一个存储单元。在另一个应用场景中,则可在大型的存储服务器上划分多个1TB的逻辑存储块,每个1TB的逻辑存储块即为存储空间大小为1TB的存储单元。
需要说明的是,门面节点10可以是单一的服务器硬件实体设备,也可以是多个服务器构成的服务器集群,该服务器集群中的服务器可分别实现门面节点的多个逻辑功能,单一服务器场景中的函数调用即可通过多服务器之间的通信实现。
具体的,如图2所示,该方法包括:
步骤S102:接收上传的分片数据,提取分片数据的数据标识。
分片数据可以是较小的独立的文件,也可以是文件片段。例如,若预先设置4kb大小的数据段为一个分片数据,则一个大小只有3kb的文档文件为一个分片数据,而一个大小为4mb的mp3音频文件则可被划分为1000个大小为4kb的分片数据。
在本实施例中,分片数据的数据标识可以是文件名或文件的摘要编码。如前例中,接收用户上传的该3kb的文档文件后,可将该文件的文件名加入上传时间戳的字段,然后将加入了上传时间戳字段的文件名作为该3kb文档文件的数据标识。下载时,用户即可通过文件名以及上传时间来确定其曾经上传的是哪一个文档文件。而对于4mb的mp3文件,则可在其文件名中加入在划分后得到的每个分片数据的编号,例如:
dgf8s6f58fg56@00001
dgf8s6f58fg56@00002
dgf8s6f58fg56@00003
……
dgf8s6f58fg56@01000
dgf8s6f58fg56为该mp3文件的摘要编码,00001至00009等相应的编号即为该分片数据在整个mp3文件中的位置。
步骤S104:获取存储节点的存储状态,根据存储状态选取存储节点,根据数据标识向存储节点请求分配存储空间。
如图1所示,存储节点可以有多个,门面节点在选择存储节点时需要进行负载均衡,选择最合适的存储节点存储分片数据。
在本实施例中,存储状态包括存储节点的I/O负载和/或剩余存储空间大小。
根据存储状态选取存储节点的步骤则包括:根据存储节点的I/O负载和/或剩余存储空间大小选取存储节点。
例如,在一个应用场景中,如图3所示,图中的存储Set即为存储节点。该存储节点包括一个master节点和多个实际存储数据的server(逻辑或物理上均可),每个server即为一个存储单元。数据存入该存储节点中的server中或数据由server取出时,需要由master节点来转发数据,因此master节点记录有该存储节点的I/O负载信息(连接数、数据I/O流量与带宽等)。且该master节点管理该多个server,并通过实时监控记录有每个server的剩余存储空间大小。
在本应用场景中,如图4和图5所示,门面节点则可实时拉取存储节点中的master节点中记录的I/O负载信息、剩余存储空间大小等存储状态,然后选择I/O负载较小,剩余存储空间较大的存储节点。具体的,可将I/O负载和剩余存储空间量化后乘以相应的权重系数加权求和后进行比较,然后选择合适的存储节点。
优选的,对于连续的属于同一文件的分片数据,则优先选择同一存储节点进行存储。如前例中,4mb的mp3文件被分为1000份,则索引节点在为分片数据选择存储节点时,由于该1000份分片数据的数据标识可拥有相同的前缀(该前缀对应同一文件),则可将拥有相同前缀的数据标识的分片数据分配到同一存储节点当中。使得在进行存储节点对应的硬件设备搬迁时,其中存储的文件的完整性得到保证,而不需要与其他存储节点产生关联。
门面节点选择合适的存储节点之后,即可向选取的存储节点发送存储空间分配请求,存储节点接收到存储空间分配请求后即可为该存储空间分配请求对应的数据标识分配存储空间。
步骤S106:接收存储节点返回的与数据标识对应的存储地址标识,存储地址标识与存储节点为数据标识分配的存储单元上的偏移位置对应。
优选的,存储节点可选择剩余存储空间最大的存储单元进行分配。优选的,对于连续的属于同一文件的分片数据,则优先选择同一存储单元进行存储。也就是说,尽量保证文件在某个存储单元中的整体性,从而在数据迁移时,可快速定位文件的所有分片数据,提高效率。
存储节点选定了剩余存储空间最大的存储单元之后,即可获取其剩余存储空间的起始位置,该起始位置即为可存储数据的空闲存储空间的偏移量。之后,存储节点即可根据其自身的节点标识,其选定的剩余存储空间最大的存储单元的单元标识以及前述的偏移量生成存储地址标识。即生成的存储地址标识可以包括与存储节点对应的节点标识字段、与存储单元对应的单元标识字段以及偏移量字段。
参考前例的应用场景和图4所示内容,由master节点接收门面节点发出的存储空间分配请求,并在所辖的server中选择剩余空间最大的server来进行存储。master节点在找出剩余空间最大的server后,则可获取该server上空闲存储空间在该server的存储地址上的起始位置作为偏移量。
例如,若master节点的节点标识为其域名:datastoreset213,master节点选定的剩余存储空间最大的存储单元的单元标识为其存储器编号:server2,该存储单元上空闲存储空间的偏移量:30930212392,则生成的存储地址标识即可以设置为:datastoreset213@server2@30930212392。
存储节点生成存储地址标识之后,即可将其返回给门面节点,通知门面节点可向该地址写入数据。优选的,存储节点可将该存储地址标识对应的存储位置加锁。加锁之后,存储节点则不会将该存储地址标识对应的存储位置分配给其他的存储空间分配请求。例如,若预设的分片数据大小最大为4kb,则可将选定的存储单元上以前述的偏移量为起始,长度为4kb大小的存储块加锁,该位置的4kb大小的存储块则不会被分配给其他存储空间分配请求。
步骤S108:将分片数据发送至存储地址标识对应的存储位置进行存储。
在本实施例中,提取存储地址标识中的节点标识字段,获取与节点标识字段对应的存储节点,将分片数据发送至存储节点,由存储节点存储到与存储地址标识中的单元标识字段和偏移量字段对应的存储位置。
如前例中,若存储节点返回的存储地址标识为:
datastoreset213@server2@30930212392
则可将分片数据发送给datastoreset213对应的存储节点,存储节点接收到分片数据之后则可将其存储到server2上的30930212392位置处。
需要说明的是,也可以根据需要设置域名服务器,用于映射存储节点的节点标识与IP地址。如上例中,若门面节点根据存储地址标识提取到节点标识字段为datastoreset213,则可通过设置的域名服务器查询到该字符串对应的IP地址,然后通过该IP地址将分片数据发送至相应的存储节点。
进一步的,存储节点将接收到的分片数据存储到相应位置后,还可将分片数据对应的存储块解锁。如前例中,若对存储块解锁,则可执行后续的下载和删除操作。
在本实施例中,接收存储节点返回的与数据标识对应的存储地址标识之后还可生成数据标识与存储地址标识对应的索引并存储。
如图6所示,参考图4的说明存储set即为存储节点,chid即为分配的存储地址标识中的节点标识字段和单元标识字段,fid即为空闲存储空间在存储单元上的偏移量(offside),Idx-master即为创建的索引。在本实施例中,由于索引的数据量较大,因此可将索引存储在独立的索引逻辑服务器上。
而在进行数据下载时,则可根据该索引定位分片数据,其过程可具体为:
接收数据下载请求,提取相应的数据标识,根据索引查找与数据标识对应的存储地址标识;读取与存储地址标识对应的数据,并将其返回给与数据下载请求对应的终端。
进一步的,读取与存储地址标识对应的数据的步骤可具体为:
向存储地址标识中的节点标识字段对应的存储节点发送数据拉取请求;接收存储节点返回的由该存储节点根据存储地址标识中包含的单元标识字段和偏移量字段读取的分片数据。
例如,用户希望下载前述的上传的mp3音乐,则可向门面节点发起数据下载请求。门面节点通过数据库查询可得到该用户前述上传的mp3音乐文件的哈希值为dgf8s6f58fg56,且该文件已被划分成1000个分片数据,则门面节点依次从dgf8s6f58fg56@00001开始拉取,在索引中查询到dgf8s6f58fg56@00001到dgf8s6f58fg56@01000对应的存储地址标识,然后向查询到的存储地址标识对应的存储节点发起数据拉取请求,存储节点则可提取其中包含的单元标识字段和相应的偏移量字段,根据单元标识字段和偏移量字段读取数据后返回给门面节点。门面节点即可将接收到的数据整合后以数据流的形式返回给用户使用的终端。
在另一个实施例中,也可直接使用整个文件的文件名或摘要编码作为数据标识。例如可使用dgf8s6f58fg56作为数据标识,而该数据标识在索引中对应1000个存储地址标识,该1000个存储地址标识则分别对应该mp3文件被分片得到的1000个连续的分片数据的存储地址。在下载该mp3文件时,则可通过索引查找到与该dgf8s6f58fg56数据标识对应的1000个存储地址标识,再根据该1000个存储地址标识分别拉取分片数据。
如图7所示,图7展示了终端上传文件进行存储和终端访问门面节点上传文件进行存储和下载文件数据的时序过程。
优选的,存储节点分配为存储分配请求分配了的存储地址标识之后,还可分配与该存储地址标识对应的备份存储位置。
如图4中,存储节点(即图4中的存储set)中的每个server节点均可具有主备存储设备,当master节点在将分片数据写入存储地址标识对应的server节点时,可向每个server节点的所有主备存储设备写入同一分片数据的拷贝。主备存储设备的容量可设置为一致,master节点在写入时,可根据存储地址标识中的偏移量字段在不同的主备存储设备中写入。
在本实施例中,读取与存储地址标识对应的数据的步骤还包括:
由存储节点根据偏移量字段读取单元标识字段对应的主存储单元上的分片数据,若读取失败,则根据偏移量字段读取单元标识字段对应的备存储单元上的分片数据。
也就是说,若主存储单元由于设备故障损坏导致数据遗失,仍然可以通过备存储单元得到存储的数据,且主存储单元和备存储单元的数据是同步的,在存储时一并存储,修改时一并修改,删除时一并删除,,不会出现数据冲突的情况。
需要说明的是,门面节点10并不限于独立的服务器设备。在一个实施例中,如图8所示,门面节点10可包括数据上传节点12、索引管理节点14以及数据下载节点16。数据上传节点12则用于处理文件上传业务;索引管理节点则用于更新和维护索引;数据下载节点16则用于处理文件下载业务。数据上传节点12、索引管理节点14以及数据下载节点16各自又可以对应不同的服务器集群。在其他实施例中,还可根据门面节点10的功能进一步地细分服务器,从而使得门面节点处理业务的负载得到分散。
在一个实施例中,一种数据存储装置,如图9所示,包括:数据接收模块102、存储节点选择模块104、存储地址获取模块106以及数据存储模块108,其中:
数据接收模块102,用于接收上传的分片数据,提取所述分片数据的数据标识。
存储节点选择模块104,用于获取存储节点的存储状态,根据存储状态选取存储节点,根据数据标识向存储节点请求分配存储空间。
存储地址获取模块106,用于接收存储节点返回的与数据标识对应的存储地址标识,存储地址标识与存储节点为数据标识分配的存储单元上的偏移位置对应。
数据存储模块108,用于将分片数据发送至存储地址标识对应的存储位置进行存储。
在本实施例中,存储状态包括存储节点的I/O负载和/或剩余存储空间大小;
存储节点选择模块104还用于根据存储节点的I/O负载和/或剩余存储空间大小选取存储节点。
在本实施例中,存储地址标识包括与存储节点对应的节点标识字段、与存储单元对应的单元标识字段以及偏移量字段。
在本实施例中,如图9所示,数据存储装置还包括索引生成模块110,用于生成数据标识与存储地址标识对应的索引并存储。
在本实施例中,如图9所示,数据存储装置还包括数据拉取模块112,用于接收数据下载请求,提取相应的数据标识,根据索引查找与数据标识对应的存储地址标识;读取与存储地址标识对应的数据,并将其返回给与数据下载请求对应的终端。
在本实施例中,数据拉取模块112还用于向存储地址标识中的节点标识字段对应的存储节点发送数据拉取请求;接收存储节点返回的由该存储节点根据存储地址标识中包含的单元标识字段和偏移量字段读取的分片数据。
在本实施例中,数据存储模块108还用于提取存储地址标识中的节点标识字段,获取与节点标识字段对应的存储节点,将分片数据发送至存储节点,由存储节点存储到与存储地址标识中的单元标识字段和偏移量字段对应的存储位置。
一种数据存储系统,如图1所示,包括门面节点10和存储节点20,其中:
门面节点10用于接收上传的分片数据,获取存储节点的存储状态,根据存储状态选取存储节点,向存储节点发送存储空间分配请求;
存储节点20用于为存储空间分配请求分配存储单元,并获取存储单元上的空闲的存储位置的偏移量,根据分配的存储单元和偏移量生成存储地址标识,返回门面节点。
门面节点10用于将分片数据发送至存储地址标识对应的存储节点;
存储节点20用于根据存储地址标识存储分片数据。
一种数据存储方法,如图10所示,包括:
步骤S202,门面节点接收上传的分片数据,获取存储节点的存储状态,根据存储状态选取存储节点,向存储节点发送存储空间分配请求;
步骤S204,存储节点用于为存储空间分配请求分配存储单元,并获取存储单元上的空闲的存储位置的偏移量,根据分配的存储单元和偏移量生成存储地址标识,返回门面节点。
步骤S206,门面节点将分片数据发送至存储地址标识对应的存储节点;
步骤S208,存储节点根据存储地址标识存储分片数据。
上述数据存储方法及装置中,门面节点在选择存储节点时,根据存储节点的存储状态进行选择,也就是说总是会选择存储速度较快的或剩余存储空间较大的存储节点进行存储,使得存储效率得到提高。
同时,由于同一时间存储节点的存储状态不会发生突发性的改变,使得在存储大文件的多个连续的分片数据时,通常会存储在同一个存储节点上,因此在存储节点搬迁或存储节点上的数据进行迁移时,涉及到的关联的存储节点的数量较小,从而降低了搬迁成本。
在一个实施例中,如图11所示,提供了一种可运行前述数据处理方法的服务器结构示意图,该业务节点结构可应用于运行计算机程序的服务器上。该服务器500可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(centralprocessing units,CPU)522(例如,一个或一个以上处理器)和存储器532,一个或一个以上存储应用程序542或数据544的存储介质530(例如一个或一个以上海量存储设备)。其中,存储器532和存储介质530可以是短暂存储或持久存储。存储在存储介质530的程序可以包括一个或一个以上模块(如前述的数据接收模块102、存储节点选择模块104、存储地址获取模块106以及数据存储模块108),每个模块可以包括对业务节点中的一系列指令操作。更进一步地,中央处理器522可以设置为与存储介质530通信,在服务器500上执行存储介质530中的一系列指令操作。服务器500还可以包括一个或一个以上电源526,一个或一个以上有线或无线网络接口550,一个或一个以上输入输出接口558,和/或,一个或一个以上操作系统541,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。
上述图2所示实施例中所述的步骤可以基于该图11所示的服务器结构。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。