数据读写方法及分布式存储系统的制作方法_3

文档序号:9505946阅读:来源:国知局
3份副本数据,以追加写方式向分布式文件系统写入3份副本数据;采用纠删码对3份副本数据进行编码,生成分片数据对应的1.5份副本数据;将1.5份副本数据写入分布式文件系统中。
[0044]在本实施例中,在利用主分片模块将分片数据写入分布式文件系统中时,基于分布式文件系统不能支持任意长度的追加写功能,可以首先采用追加写的方式向分布式文件系统中写入分片数据对应的3份副本数据(也成称之为3副本文件),然后采用纠删码对3份副本数据进行编码,生成分片数据对应的1.5份副本数据(也可称之为1.5副本文件),然后转写1.5副本文件,即将1.5份副本文件写入分布式文件系统中。
[0045]在本实施例中,转写1.5副本文件的操作可由分布式文件系统提供,但由于分布式文件系统针对1.5副本文件不支持追加写,所以必须一次写完1.5副本文件。在本实施例中,1.5份副本文件的转写可选择在流量低峰时期进行,从而不影响高峰时期系统的吞吐。在转写完成后,标记索引转向新文件并且减旧文件的引用计数。当没有读取请求使用旧文件时,可以删除旧文件会来释放空间。
[0046]在本实施例中,由于分片数据在分布式文件系统中存储顺序为顺序存储,当同一个数据标识发生更新操作时,就会产生空洞,造成磁盘空间的浪费。例如,对于同一个数据标识,第一次将该数据标识对应的分片数据写入分布式文件系统中时,文件长度为1MB。当第二次对同一个数据标识进行更新时,则插入与第一次写入不同的IMb的数据。如果继续采用追加写进行写入,文件长度为2MB,其中,文件末尾的IMb为正确的数据,文件的前IMb数据已失效,由于数据标识已更新,导致文件中产生IMb的空洞。在本实施例中,可以采用定期进行数据重写来擦除空洞,从而回收磁盘空间。采用定期进行数据重写来擦除空洞可以采用以下方式进行:可以定期统计空洞比例,当空洞比例高于阈值时可以启动记录重新操作。主控服务器负责将所有数据按照索引文件的顺序依次读取,然后采用CAS(ContentAddressing Storage,固定内容寻址存储)方式来重新将数据写入到分布式文件系统中。如果一个数据文件中的所有数据重写完成,将删除此数据文件。在数据重写过程中,如果一个数据标识没有更新,则判断写入成功,否则判断数据写入失败丢掉该数据,从而在重写完成后消除空洞。
[0047]步骤203,将处理结果发送至客户端。
[0048]在本实施例中,在对处理请求处理之后,可以得到处理结果。当处理请求为写入请求时,可以向客户端返回指示写入成功的信息作为处理结果。当处理请求为读取请求时,可以在成功读取分片数据之后,将分片数据作为处理结果发送至客户端。
[0049]在实施例所提供的数据读写方法具有以下特点:
[0050]I)高性能:通过加载在内存中的哈希表,将数据索引全量加载在内存中,使得对分片数据的读取请求(也可称之为查询请求)的处理时间接近于一次分布式文件系统的随机读请求的时间,从而最大限度的接近分布式文件系统的极限性能。相较于现有技术的SST文件以二分查找的方式查找分片数据,节省了大量归并查找的时间。对于分片数据的写入请求的处理的耗时接近于分布式文件系统对索引和数据文件以追加写方式进行写入所消耗的时间。
[0051]2)低成本:通过分布式文件系统对数据文件进行1.5副本文件的转写,相较于现有技术中的采用3副本对数据进行存储,节省存储空间。
[0052]3)高可靠:依靠高可靠的分布式文件系统对数据进行存储,具有等同于分布式文件系统的可靠性,从而提升分布式存储系统的可靠性。针对每一个主分片模块,分别设置与其对应的从分片模块,并且主分片模块与从分片模块位于不同的分片服务器,使得系统不存在单一节点,同时,当主分片模块以及与其对应的从分片模块同时故障,由于分片数据的数据标识与数据索引均存储于可靠性较高的分布式文件系统中,从而可以在较短的时间内从分布式文件系统中重建数据索引来恢复对写入请求和读取请求的处理,进一步提升分布式存储系统的可靠性。
[0053]请参考图5,其示出了根据本申请的数据读写方法的另一个实施例的流程500。本实施例所提供的数据读写方法可由主控服务器执行。该方法包括以下步骤:
[0054]步骤501,接收客户端发送的查询请求。
[0055]在本实施例中,查询请求包括待处理的分片数据对应的数据标识。在本实施例中,对数据的写入和读取可以以分片数据为单位。例如,在将一本词典对应的数据写入分布式文件系统中时,可以将字典对应的数据划分为多份数据,将每一份数据称之为分片数据。在将分片数据存储在分布式文件系统后,可以以分片数据为单元对分片数据进行读取。在实施例中,分片数据可以预先对应一个数据标识(也可称之为Key)。
[0056]步骤502,基于数据标识对应的哈希值所处的哈希值区间,确定用于对待处理的分片数据进行处理的分片服务器。
[0057]在本实施例中,每一个分片服务器可以预先对应多个哈希值区间。在本实施例中,可以采用以下方式确定用于处理处理请求的分片服务器:计算数据标识对应的哈希值所处的哈希值区间,当数据标识对应的哈希值所处的哈希值区间为分片服务器预先对应的多个哈希值区间之一时,可以由该分片服务器对待处理的分片数据进行处理。
[0058]在本实施例的一些可选的实现方式中,基于数据标识对应的哈希值所处的哈希值区间,确定用于对待处理的分片数据进行处理的分片服务器包括:基于数据标识对应的哈希值所处的哈希值区间,确定用于对待处理的分片数据进行处理的主分片模块或所述主分片模块对应的从分片模块,其中,每一个主分片模块与从分片模块预先均对应一个相同的哈希值区间;基于主分片模块或从分片模块与分片服务器的对应关系表,确定主分片模块或从分片模块所在的分片服务器。
[0059]在本实施例中,可以首先确定出用于处理处理请求的主分片模块或从分片模块,然后再根据主分片模块或从分片模块主分片模块与分片服务器的对应关系,确定出主分片模块或从分片模块所在的分片服务器。从而可以将处理请求发送上述经确定的分片服务器的主分片模块或从分片模块上,以利用主分片模块或从分片模块对处理请求进行处理。
[0060]在本实施例中,可以预先维护主分片模块或从分片模块与分片服务器的对应关系,以及分片数据的数据标识与主分片模块或从分片模块的对应关系。首先以利用分片服务器上的主分片模块处理客户端发送的处理请求为例,分片数据的数据标识与主分片模块的对应关系基于以下方式进行设置:主分片模块对应一个指示该主分片模块负责处理的分片数据的数据标识和数据索引的对应关系的哈希表。每一个经由该主分片模块写入分布式文件系统中的分片数据的数据标识进行哈希函数计算之后可以对应一个哈希值。可以预先将主分片模块对应于一个哈希值区间,即由主分片模块负责处理对应的哈希值在该哈希值区间内的分片数据的处理请求,进而建立分片数据的数据标识与主分片模块的对应关系。在本实施例中,主控服务器可以根据主分片模块与分片服务器的对应关系以及分片数据的数据标识与主分片模块的对应关系,确定出用于处理处理请求的分片服务器,以及该分片服务器上用于处理处理请求的主分片模块。
[0061]在本实施例中,从分片模块可以与其对应的主分片模块对应同一个哈希值区间。基于上述建立分片数据的数据标识与主分片模块的对应关系的原理,可以建立分片数据的数据标识与从分片模块的对应关系。从而当利用从分片处理客户端发送的读取请求时,主控服务器可以根据从分片模块与分片服务器的对应关系,以及分片数据的数据标识与从分片模块的对应关系,确定用于处理读取请求的分片服务器,以及用于处理读取请求的该分片服务器上的从分片模块。
[0062]请参考图6,其示出了根据本申请的数据读写方法的再一个实施例的流程600。本实施例所提供的数据读写方法可由客户端执行。该方法包括以下步骤:
[0063]步骤601,接收对分片数据的处理指令,向主控服务器发送查询请求。
[0064]在本实施例中,查询请求包括分片数据的数据标识。可以首先接收对分片数据的处理指令,然后向主控服务器发送查询请求,来确定用于对分片数据的处理请求进行处理的分片服务器。
[0065]步骤602,向分片服务器发送对分片数据的处理请求。
[0066]在本实施例中,可以向经由主控服务器基于分片数据的数据标识而确定的分片服务器发送对分片数据的处理请求,从而可以利用经确定的分片服务器对处理请求进行处理。例如,可以利用分片服务器上主分片模块将分片数据写入到分布式文件系统中,又例如,可以利用分片服务器上主分片模块或从分片模块从分布式文件系统中读取出数据标识对应的分片数据。
[0067]步骤603,接收分片服务器返回的对处理请求进行处理之后得到的处理结果。
[0068]在本实施例中,在向经确定的分片服务器发送对分片数据的处理请求之后,可以接收分片服务器返回的对处理请求进行处理之后得到的处理结果。例如,当处理请求
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1