【发明内容】
基于此,有必要提供一种提高读写速度的数据读写方法。
一种数据读写方法,包括以下步骤:
获取写操作请求及用户标识号,根据所述用户标识号从第一数据文件中读取与所述用户标识号相对应的数据块,再根据所述写操作请求及所述读取的数据块生成新的数据块,并将新的数据块顺序写入到所述第一数据文件中;
记录所述新的数据块与用户标识号的对应关系以及所述新的数据块的偏移地址信息;
获取读操作请求及用户标识号,根据所述读操作请求、用户标识号与新的数据块的对应关系及新的数据块的偏移地址信息从所述第一数据文件中读取与所述用户标识号相对应的新的数据块。
优选地,还包括步骤:记录写操作,生成写操作备份文件。
优选地,还包括步骤:
计算所述第一数据文件的利用率;
判断所述第一数据文件的利用率是否小于预设阈值,若是,则将所述第一数据文件中的有效的数据块进行数据转移到第二数据文件中,否则返回到计算所述第一数据文件的利用率的步骤。
优选地,还包括步骤:在预定间隔时间内扫描所述第一数据文件,当第一数据文件中的数据块无效时,删除所述第一数据文件。
优选地,还包括步骤:判断所述第一数据文件中的数据块是否为空,若是,则将所述第一数据文件中的所述数据块的索引设置为空指针。
此外,还有必要提供一种提高读写速度的数据读写系统。
一种数据读写系统,包括:
主写进程模块,用于获取写操作请求及用户标识号,根据所述用户标识号从第一数据文件中读取与所述用户标识号相对应的数据块,再根据所述写操作请求及读取的数据块生成新的数据块,并将新的数据块顺序写入到所述第一数据文件中;
存储模块,用于记录所述新的数据块与用户标识号的对应关系以及所述新的数据块的偏移地址信息;
读进程模块,用于获取读操作请求及用户标识号,根据所述读操作请求、用户标识号与新的数据块的对应关系及新的数据块的偏移地址信息从所述第一数据文件中读取与所述用户标识号相对应的新的数据块。
优选地,还包括辅助写进程模块,所述辅助写进程模块用于记录写操作,生成写操作备份文件。
优选地,还包括重整进程模块,所述重整进程模块用于计算所述第一数据文件的利用率,并判断所述第一数据文件的利用率是否小于预设阈值;所述主写进程模块还用于在所述重整进程模块判断出所述第一数据文件的利用率小于预设阈值时,将所述第一数据文件中的有效的数据块进行数据转移到第二数据文件中。
优选地,所述重写进程模块还用于在预定间隔时间内扫描所述第一数据文件,当第一数据文件中的数据块无效时,删除所述第一数据文件。
优选地,还包括指针设置模块,所述指针设置模块用于在所述第一数据文件中的数据块为空时,将所述第一数据文件中的所述数据块索引设置为空指针。
上述数据读写方法及系统,采用写操作时,将第一数据文件中的与用户标识号相对应的数据块读取出来,再根据写操作及读取的数据块生成新的数据块,并将新的数据块顺序写入到第一数据文件中,读操作时,根据用户标识号查找到对应的新的数据块读取出来,实现了多用户数据的快速读写,提高了读写速度。
另外,因根据写操作读取出原有的数据块,并生成新的数据块,再将新的数据块顺序写入到第一数据文件中,不会出现大量数据涌入数据库而使数据库瞬间压力暴增的情况,数据读写性能稳定。
【具体实施方式】
下面结合具体的实施例及附图对技术方案进行详细的描述。
如图1所示,在一个实施例中,一种数据读写方法,包括以下步骤:
步骤S100,获取写操作请求及用户标识号,根据该用户标识号从第一数据文件中读取与该用户标识号相对应的数据块,再根据该写操作请求及该读取的数据块生成新的数据块,并将新的数据块顺序写入到该第一数据文件中。
第一数据文件中存储有多个用户的数据块、每个数据块的偏移地址信息以及用户的数据块与用户标识号存在对应关系。用户进行写操作时,需发送写操作请求。同时,写操作时需获取到用户原有的数据,为此需得到用户标识号,根据用户标识号从第一数据文件中读取到与该用户标识号相对应的数据块。如用户A发表微博信息,在微博服务器的第一数据文件中会分配一个空闲位置给用户A,存储用户A的数据块1及数据块1的偏移地址信息,该偏移地址信息即为数据块的起始地址。该写操作可为增加数据、删除数据、修改数据等操作类型。
根据写操作请求及读取的数据块生成新的数据块,并将新的数据块顺序写入到第一数据文件中。
当写操作为增加数据操作时,根据写操作请求,获取到增加的数据,将增加的数据与读取的与用户标识号相对应的数据块中的数据合并在一起,生成新的数据块,将新的数据块顺序写入到第一数据文件中。
当写操作为删除数据操作时,根据写操作请求,读取第一数据文件中的与用户标识号相对应的数据块,选中数据块中需要删除的数据删除,将剩下的数据生成新的数据块,再将新的数据块顺序写入到第一数据文件中。
当写操作为修改数据操作时,根据写操作请求,读取第一数据文件中的与用户标识号相对应的数据块,选中数据块中需要修改的数据进行修改操作,将修改后的数据与未修改的数据一起生成新的数据块,将新的数据块顺序写入到第一数据文件中。
上述写操作均在SSD硬盘上执行。每次写操作都会进行是否重复的写检查。
另外,在一个实施例中,上述数据读写方法,在步骤S100执行的同时,还包括步骤:记录写操作,生成写操作备份文件。记录写操作,即记录该写操作是增加数据、删除数据或者修改数据等操作类型,生成写操作备份文件,记录写操作的类型及时间等。如2011年5月1日,写操作为增加数据操作。
步骤S200,记录该新的数据块与用户标识号的对应关系以及新的数据块的偏移地址信息。
新的数据块生成后,写入第一数据文件中,会将新的数据块与用户标识号进行映射,产生对应关系,方便查询。新的数据块写入后,会分配该新的数据块写入的偏移地址信息,即新的数据块的起始地址。新的数据块与用户标识号映射产生对应关系后,原有的数据块与用户标识号的对应关系将自动解除。
步骤S300,获取读操作请求及用户标识号,根据该读操作请求、用户标识号与新的数据块的对应关系及新的数据块的偏移地址信息从该第一数据文件中读取与该用户标识号相对应的新的数据块。
用户读取数据时,需发送读操作请求及该用户的标识号。根据用户标识号依据用户标识号及数据块的对应关系查找到相应的数据块,根据数据块的偏移地址信息从该新的数据块的起始地址开始读取该新的数据块,从而得到该新的数据块中的数据。
优选的实施例中,如图2所示,上述数据读写方法,除了包括步骤S100至S300,还包括以下步骤:
步骤S400,计算第一数据文件的利用率。
第一数据文件的利用率等于第一数据文件中有效数据块的大小除以第一数据文件大小所得值的百分比。其中,有效数据块是指存在被索引链接引用的数据块,即用户访问数据块时,需通过索引查找到该数据块,存在这种对应关系的数据块则为有效数据块,数据块无法被索引链接到则为无效数据块。
步骤S500,判断第一数据文件的利用率是否小于预设阈值,若是,执行步骤S600,否则返回步骤S400。
预设阈值可由系统设定,如为28%、30%、40%、45%等。
步骤S600,将第一数据文件中的有效数据块进行数据转移到第二数据文件中。
数据转移是指将第一数据文件的有效数据块读出来并写入到第二数据文件中。如图3所示,数据文件利用率小于40%的,将有效数据转移到该用户的最新数据文件中,第二数据文件可为最新数据文件。将有效数据块转移到第二数据文件中后,第一数据文件中的数据块将均为无效数据块,第一数据文件可被删除,以节省磁盘空间。因第一数据文件中存储有效数据块和大量的无效数据块,将有效数据块转移后,剩余无效数据块,将第一数据文件删除,节省了磁盘空间。
步骤S700,在预定时间间隔内扫描第一数据文件,判断第一数据文件中的数据块是否无效,若是,则执行步骤S800,否则执行步骤S900。
由于每次写操作都会生成新的数据块,因此会存在较多无用的数据块,占用比较多的磁盘空间,为了释放空闲空间,需定期扫描第一数据文件,当第一数据文件中的数据块均为无效数据块时,则直接删掉该第一数据文件,以节省磁盘空间。
步骤S800,删除该第一数据文件。
步骤S900,保留该第一数据文件。优选的实施例中,上述数据读写方法,还包括步骤:判断第一数据文件中的数据块是否为空,若是,则将第一数据文件中的数据块的索引设置为空指针。第一数据文件的数据块没有数据时,将第一数据文件中的数据块的索引设为空指针(NULL)。
如图4所示,在一个实施例中,一种数据读写系统,包括主写进程模块400、存储模块410和读进程模块420。
主写进程模块400用于获取写操作请求及用户标识号,根据该用户标识号从第一数据文件中读取与该用户标识号相对应的数据块,再根据该写操作请求及读取的数据块生成新的数据块,并将新的数据块顺序写入到第一数据文件中。
第一数据文件中存储有多个用户的数据块、每个数据块的偏移地址信息以及用户的数据块与用户标识号存在对应关系。用户通过主写进程模块400进行写操作时,需发送写操作请求。同时,写操作时需获取到用户原有的数据,为此需得到用户标识号,根据用户标识号从第一数据文件中读取到与该用户标识号相对应的数据块。如用户A发表微博信息,在微博服务器的第一数据文件中会分配一个空闲位置给用户A,存储用户A的数据块1及数据块1的偏移地址信息,该偏移地址信息即为数据块的起始地址。
该写操作可为增加数据、删除数据、修改数据等操作类型。
主写进程模块400根据用户标识号在第一数据文件查找到相对应的数据块,读取该数据块,再根据写操作请求及读取的数据块生成新的数据块,并将新的数据块顺序写入到第一数据文件中。
当写操作为增加数据操作时,主写进程模块400根据写操作请求,获取到增加的数据,将增加的数据与读取的与用户标识号相对应的数据块中的数据合并在一起,生成新的数据块,将新的数据块顺序写入到第一数据文件中。
当写操作为删除数据操作时,主写进程模块400根据写操作请求,读取第一数据文件中的与用户标识号相对应的数据块,选中数据块中需要删除的数据删除,将剩下的数据生成新的数据块,再将新的数据块顺序写入到第一数据文件中。
当写操作为修改数据操作时,主写进程模块400根据写操作请求,读取第一数据文件中的与用户标识号相对应的数据块,选中数据块中需要修改的数据进行修改操作,将修改后的数据与未修改的数据一起生成新的数据块,将新的数据块顺序写入到第一数据文件中。
上述写操作均在SSD硬盘上执行。每次写操作都会进行是否重复的写检查。
存储模块410用于记录该新的数据块与用户标识号的对应关系及新的数据块的偏移地址信息。新的数据块生成后,顺序写入第一数据文件中,会将新的数据块与用户标识号进行映射,产生对应关系,方便查询。新的数据块写入后,会分配该新的数据块写入的偏移地址信息,即新的数据块的起始地址。新的数据块与用户标识号映射产生对应关系后,原有的数据块与用户标识号的对应关系将自动解除。
读进程模块420用于获取读操作请求及用户标识号,根据该读操作请求、用户标识号与新的数据块的对应关系及新的数据块的偏移地址信息从所述第一数据文件中读取与所述用户标识号相对应的新的数据块。用户读取数据时,需发送读操作请求及该用户的标识号。读进程模块420根据用户标识号依据用户标识号及数据块的对应关系查找到相应的数据块,根据数据块的偏移地址信息从该新的数据块的起始地址开始读取该新的数据块,从而得到该新的数据块中的数据。
在一个实施例中,如图5所示,上述数据读写系统,除了包括主写进程模块400、存储模块410和读进程模块420,还包括辅助写进程模块430、重整进程模块440和指针设置模块450。
辅助写进程模块430用于记录写操作,生成写操作备份文件。该实施例中,辅助写进程模块430可为Binlog写进程。所有写操作的二进制包由主写进程模块400通过binlog-channel传递给Binlog写进程记录,生成写操作备份文件。记录写操作,即记录该写操作是增加数据、删除数据或者修改数据等操作类型,生成写操作备份文件,记录写操作的类型及时间等。如2011年5月1日,写操作为增加数据操作。
重整进程模块440用于计算第一数据文件的利用率,并判断该第一数据文件的利用率是否小于预设阈值。第一数据文件的利用率等于第一数据文件中有效数据块的大小除以第一数据文件大小所得值的百分比。其中,有效数据块是指存在被索引链接引用的数据块,即用户访问数据块时,需通过索引查找到该数据块,存在这种对应关系的数据块则为有效数据块,数据块无法被索引链接到则为无效数据块。预设阈值可由系统设定,如为28%、30%、40%、45%等。
主写进程模块400还用于在重整进程模块440判断出该第一数据文件的利用率小于预设阈值时,将该第一数据文件中的有效数据块进行数据转移到第二数据文件中。第二数据文件为新建的数据文件。数据转移是指将第一数据文件的有效数据块读出来并写入到第二数据文件中。如图3所示,数据文件利用率小于40%的,将有效数据转移到最新数据文件中,第二数据文件作为最新数据文件。将有效数据块转移到第二数据文件中后,第一数据文件中的数据块将均为无效数据块,第一数据文件可被删除,以节省磁盘空间。因第一数据文件中存储有效数据块和大量的无效数据块,将有效数据块转移后,剩余无效数据块,将第一数据文件删除,节省了磁盘空间。
优选的实施例中,重整进程模块440还用于在预定间隔时间内扫描该第一数据文件,当第一数据文件中的数据块无效时,删除该第一数据文件。由于每次写操作都会生成新的数据块,因此会存在较多无用的数据块,占用比较多的磁盘空间,为了释放空闲空间,需定期扫描第一数据文件,当第一数据文件中的数据块均为无效数据块时,则直接删掉该第一数据文件,以节省磁盘空间。
指针设置模块450用于在该第一数据文件中的数据块为空时,将该第一数据文件的数据块的索引设置为空指针。第一数据文件的数据块内没有数据时,指针设置模块450将第一数据文件的数据块索引设为空指针(NULL)。
在不同的实施例中,上述数据读写系统,可只包括辅助写进程模块430,或重整进程模块440。
此外,上述数据读写系统初始化时,将全量用户均匀分布在多台存储设备上,当某台存储设备上的数据总量达到阈值时,启动扩容功能,将与数据文件标识号相对应的数据文件中的数据转移到新增加的存储设备上,实现并行扩容。
上述数据读写方法及系统,在单机挂载8块SSD硬盘情况下,并行写性能可达每秒3.2万次,并行随机读性能可达每秒8万次,读写速率比传统机械式硬盘提高了近100倍。
上述数据读写方法及系统,采用写操作时,将第一数据文件中的与用户标识号相对应的数据块读取出来,再根据写操作及读取的数据块生成新的数据块,并将新的数据块顺序写入到第一数据文件中,读操作时,根据用户标识号查找到对应的新的数据块读取出来,实现了多用户数据的快速读写,提高了读写速度。
另外,因根据写操作读取出原有的数据块,并生成新的数据块,再将新的数据块顺序写入到第一数据文件中,不会出现大量数据涌入数据库而使数据库瞬间压力暴增的情况,数据读写性能稳定;采用记录写操作,并生成写操作备份文件,以方便获知数据变更的具体时间及类型;采用定时扫描第一数据文件,对第一数据文件进行清理,节省SSD磁盘空间,提高磁盘空间利用率;当第一数据文件利用率低时,将有效数据块进行转移写入到第二数据文件,第一数据文件中数据块无效,将第一数据文件删除,节省磁盘空间,提高磁盘空间的利用率。
此外,利用SSD硬盘的特性,按照时间的先后顺序将数据写入SSD中,不会出现大量数据全部涌入的情况,读写性能稳定。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。