本发明专利技术涉及一种数据写入方法和装置。所述方法包括步骤:接收第一数据的写入请求,将所述第一数据写入缓存区;在所述第一数据成功写入所述缓存区后,判断是否有线程正将所述缓存区的数据写入存储设备;若无,将所述缓存区中的所有未写入所述存储设备的数据写入所述存储设备;在所有未写入所述存储设备的数据成功写入所述存储设备后,分别通知被写入所述存储设备的数据各自对应的线程,其对应的数据已成功写入所述存储设备。本发明专利技术在保证数据可靠性的前提之下提高了并发和降低了延时。
【技术实现步骤摘要】
本专利技术涉及计算机
,特别是涉及一种数据写入方法和数据写入装置。
技术介绍
随着互联网产品的用户量和数据量的增大,在往存储设备(磁盘等)中写入数据时,对写入性能要求越来越高。目前数据写入的方法一般包括两种:1、使用先进先出的线性内存队列,一个线程负责每隔一段时间从线性内存队列中读取数据写入存储设备中的文件,其它多个线程并发处理业务请求,往线性内存队列中增加数据,一旦数据插入线性内存队列,则告知用户数据写入成功。该方法可以保证数据的高并发和低延时,但是当线性内存队列中还存在未写入到存储设备的数据时,如果服务突然崩溃,则线性内存队列中的数据会丢失,而由于这些数据已经告知用户写入成功,但是实际上未被真正写入到存储设备,所以无法保证数据的可靠性。2、每个业务线程自行处理写文件,当数据被真正写入到存储设备中的文件之后,告知用户写入成功。该方法可以保证数据的可靠性,但是由于每个业务线程单独处理写文件,每写一次就涉及到一次存储设备的访问操作,而存储设备的访问是非常耗时的操作,所以会加长用户请求的延时,从而降低了并发。
技术实现思路
基于此,有必要针对上述问题,提供一种数据写入方法和装置,既能够保证数据的可靠性,又可以保证数据的高并发和低延时。为了达到上述目的,本专利技术采取的技术方案如下:一种数据写入方法,包括步骤:接收第一数据的写入请求,将所述第一数据写入缓存区;在所述第一数据成功写入所述缓存区后,判断是否有线程正将所述缓存区的数据写入存储设备;若无,将所述缓存区中的所有未写入所述存储设备的数据写入所述存储设备;在所有未写入所述存储设备的数据成功写入所述存储设备后,分别通知被写入所述存储设备的数据各自对应的线程,其对应的数据已成功写入所述存储设备。一种数据写入装置,包括:写入请求接收模块,用于接收第一数据的写入请求,将所述第一数据写入缓存区;判断模块,用于在所述第一数据成功写入所述缓存区后,判断是否有线程正将所述缓存区的数据写入存储设备;数据写入模块,用于在没有线程正将所述缓存区的数据写入存储设备时,将所述缓存区中的所有未写入所述存储设备的数据写入所述存储设备;消息发送模块,用于在所有未写入所述存储设备的数据成功写入所述存储设备后,分别通知被写入所述存储设备的数据各自对应的线程,其对应的数据已成功写入所述存储设备。本专利技术数据写入方法和装置,多个线程并发处理业务请求,往缓存区中增加数据,一旦该多个线程中的某一个线程将数据成功写入缓存区,即检测是否有线程正在对缓冲区执行刷新到存储设备的操作,若没有,则该线程直接将所有的数据写入存储设备,然后告知用户和其它线程数据写入成功。由于本专利技术采取缓冲区和多个线程并发处理的模式,所以可以保证数据的高并发和低延时;由于本专利技术往存储设备写入数据的线程为往缓冲区写入数据的多个线程中的某一个线程,一旦数据成功写入缓冲区则立即将缓冲区的所有数据写入磁盘,无需像现有技术中的第三者线程一样等待定时时间的到达,并且本专利技术在将数据成功写入存储设备后才告知用户数据写入成功,所以保证了数据的可靠性。附图说明图1为本专利技术数据写入方法实施例的流程示意图;图2为本专利技术缓存区具体实施例的示意图;图3为本专利技术数据写入装置实施例一的结构示意图;图4为本专利技术写入请求接收模块实施例的结构示意图;图5为本专利技术数据写入装置实施例二的结构示意图;图6为本专利技术数据写入模块实施例的结构示意图。具体实施方式为了更好地理解本专利技术,下面对本专利技术涉及的几个概念进行简单介绍:数据可靠性:只要用户写入数据的请求得以成功返回,则该数据必然不会丢失,即使发生服务崩溃或断电,数据也不会丢失,该功能要求称之为可靠性;线程:为程序执行流的最小单元,每个线程都是作为利用CPU(Central Processing Unit,中央处理器)的基本单位,是花费最小开销的实体;多线程:在单个程序中同时运行多个线程完成不同的工作;并发:一个时间段中多个任务同时执行;延时:用户发起请求到收到回复之间的时间。下面结合附图及较佳实施例,对本专利技术的技术方案,进行清楚和完整的描述。需要说明的是,本专利技术旨在如何提高单机性能,并不涉及集群的解决方案;文中出现的第一、第二和第三等字眼仅用于区分各技术特征,并不对各技术特征的数量和顺序等加以限定。如图1所示,一种数据写入方法,包括步骤:S110、接收第一数据的写入请求,将所述第一数据写入缓存区;S120、在所述第一数据成功写入所述缓存区后,判断是否有线程正将所述缓存区的数据写入存储设备;S130、若无,将所述缓存区中的所有未写入所述存储设备的数据写入所述存储设备;S140、在所有未写入所述存储设备的数据成功写入所述存储设备后,分别通知被写入所述存储设备的数据各自对应的线程,其对应的数据已成功写入所述存储设备。本专利技术方法为一个线程执行的步骤,以下用当前线程表示。本专利技术在保证数据可靠性的前提之下提高了并发和降低了延时,为了更好地理解本专利技术方案,下面对各个步骤的实施过程进行详细介绍。在步骤S110中,当前线程接收请求调用方(例如用户)的数据写入请求,需要写入数据到存储设备,存储设备可以为磁盘等。本专利技术定义了与现有技术中的线性内存队列不同的数据结构,该数据结构用于在内存中存储已经接收到需要被写入存储设备但是还未被写入到存储设备的数据,为一环形队列。在初始化时即设定缓冲区的大小,此后该缓冲区的大小不能修改。在缓冲区中写入数据时可以逆时针写入,也可以顺时针写入。为了更好地理解本专利技术定义的数据结构,下面以逆时针写入为例进行说明。如图2所示,所述缓冲区包括第一指针BE、第二指针FS、第三指针FE和状态标识Flush。下面对各个指针和状态标识的功能进行简单介绍。指针BE:用于标识所述缓存区中待写入数据的位置,也即写入缓存区的数据从指针BE所指示的位置开始插入。当向缓冲区中插入数据时,指针BE的位置将逆时针移动,一直移动到数据插入完成的位置。指针FS和指针FE:用于标识缓冲区中的数据正在被写入存储设备的状况。状态标识Flush:用于标识当前是否正将所述缓存区的数据写入存储设备,即当前是否正在对缓冲区做写入到存储设备的操作。可以用标识值“true”和“False”表示当前是否正在对缓冲区做写入到存储设备的操作,如果是,则该标识值为“true”,反之为“False”。也可以用其它标识值表示当前是否正在对缓冲区做写入到存储设备的操作,例如“1”和“0”等,本专利技术并不对此做出限定。所述第一指针和所述第二指针之间的区域为未存储数据的区域,即从指针BE开始沿着逆时针方向到指针FS的这段区域表示还未存储数据,该缓冲区还可以继续被插入数据。如果沿逆时针方向指针BE越过或等于指针FS,则表示缓冲区空间不足。所述第二指针和所述第三指针之间的区域为数据正在写入存储设备的区域,即从指针FS沿逆时针方向到指针FE的区域,此区域内的数据正在被写入到存储设备。如果FS->FE的数据正在写入存储设备,则状态标识为“true”,否则状态标识为“False”。所述第三指针和所述第一指针之间的区域为数据还未写入存储设备的区域,即从指针FE沿逆时针方向到指针BE的区域,此区域的数据还未被写入存储设备。在初始化此数据结构时,状态标识Flush被设置为false,指针FS、本文档来自技高网...
【技术保护点】
一种数据写入方法,其特征在于,包括步骤:接收第一数据的写入请求,将所述第一数据写入缓存区;在所述第一数据成功写入所述缓存区后,判断是否有线程正将所述缓存区的数据写入存储设备;若无,将所述缓存区中的所有未写入所述存储设备的数据写入所述存储设备;在所有未写入所述存储设备的数据成功写入所述存储设备后,分别通知被写入所述存储设备的数据各自对应的线程,其对应的数据已成功写入所述存储设备。
【技术特征摘要】
1.一种数据写入方法,其特征在于,包括步骤:接收第一数据的写入请求,将所述第一数据写入缓存区;在所述第一数据成功写入所述缓存区后,判断是否有线程正将所述缓存区的数据写入存储设备;若无,将所述缓存区中的所有未写入所述存储设备的数据写入所述存储设备;在所有未写入所述存储设备的数据成功写入所述存储设备后,分别通知被写入所述存储设备的数据各自对应的线程,其对应的数据已成功写入所述存储设备。2.根据权利要求1所述的数据写入方法,其特征在于,判断是否有线程正将所述缓存区的数据写入存储设备之后,还包括步骤:若有线程正将所述缓存区的数据写入存储设备,将所述第一数据对应的线程设置为阻塞状态。3.根据权利要求1或2所述的数据写入方法,其特征在于,所述缓存区包括第一指针、第二指针、第三指针和状态标识;所述第一指针用于标识所述缓存区中待写入数据的位置,所述状态标识用于标识当前是否正将所述缓存区的数据写入存储设备,所述第一指针和所述第二指针之间的区域为未存储数据的区域,所述第二指针和所述第三指针之间的区域为数据正在写入存储设备的区域,所述第三指针和所述第一指针之间的区域为数据还未写入存储设备的区域。4.根据权利要求3所述的数据写入方法,其特征在于,接收第一数据的写入请求,将所述第一数据写入缓存区的步骤包括:接收第一数据的写入请求,检测所述缓冲区是否有未存储数据的区域;若有,将所述第一数据写入所述第一指针所指向的当前位置,然后将所述第一指针由当前位置移动到新位置,其中新位置与当前位置之间的区域存储的数据为所述第一数据;若没有,返回第一数据写入失败的消息。5.根据权利要求3所述的数据写入方法,其特征在于,将所述缓存区中的所有未写入所述存储设备的数据写入所述存储设备的步骤包括:将所述第三指针移动至所述第一指针所指向的新位置,并设置所述状态标识为当前正将所述缓存区的数据写入存储设备;将所述第二指针和移动后的所述第三指针之间的区域的数据写入所述存储设备。6.一种数据写入装置,其特征在于,包括:写入请求接收模块,用于接收第一数据的...
【专利技术属性】
技术研发人员:陈仕明,
申请(专利权)人:广州华多网络科技有限公司,
类型:发明
国别省市:广东;44
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。