CN106055281B - 数据写入方法和装置 - Google Patents
数据写入方法和装置 Download PDFInfo
- Publication number
- CN106055281B CN106055281B CN201610509122.2A CN201610509122A CN106055281B CN 106055281 B CN106055281 B CN 106055281B CN 201610509122 A CN201610509122 A CN 201610509122A CN 106055281 B CN106055281 B CN 106055281B
- Authority
- CN
- China
- Prior art keywords
- data
- pointer
- storage device
- written
- area
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 27
- 230000000903 blocking effect Effects 0.000 claims description 10
- 238000001514 detection method Methods 0.000 claims description 2
- 230000009471 action Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 238000011010 flushing procedure Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002035 prolonged effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0674—Disk device
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种数据写入方法和装置。所述方法包括步骤:接收第一数据的写入请求,将所述第一数据写入缓存区;在所述第一数据成功写入所述缓存区后,判断是否有线程正将所述缓存区的数据写入存储设备;若无,将所述缓存区中的所有未写入所述存储设备的数据写入所述存储设备;在所有未写入所述存储设备的数据成功写入所述存储设备后,分别通知被写入所述存储设备的数据各自对应的线程,其对应的数据已成功写入所述存储设备。本发明在保证数据可靠性的前提之下提高了并发和降低了延时。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种数据写入方法和数据写入装置。
背景技术
随着互联网产品的用户量和数据量的增大,在往存储设备(磁盘等)中写入数据时,对写入性能要求越来越高。目前数据写入的方法一般包括两种:
1、使用先进先出的线性内存队列,一个线程负责每隔一段时间从线性内存队列中读取数据写入存储设备中的文件,其它多个线程并发处理业务请求,往线性内存队列中增加数据,一旦数据插入线性内存队列,则告知用户数据写入成功。该方法可以保证数据的高并发和低延时,但是当线性内存队列中还存在未写入到存储设备的数据时,如果服务突然崩溃,则线性内存队列中的数据会丢失,而由于这些数据已经告知用户写入成功,但是实际上未被真正写入到存储设备,所以无法保证数据的可靠性。
2、每个业务线程自行处理写文件,当数据被真正写入到存储设备中的文件之后,告知用户写入成功。该方法可以保证数据的可靠性,但是由于每个业务线程单独处理写文件,每写一次就涉及到一次存储设备的访问操作,而存储设备的访问是非常耗时的操作,所以会加长用户请求的延时,从而降低了并发。
发明内容
基于此,有必要针对上述问题,提供一种数据写入方法和装置,既能够保证数据的可靠性,又可以保证数据的高并发和低延时。
为了达到上述目的,本发明采取的技术方案如下:
一种数据写入方法,包括步骤:
接收第一数据的写入请求,将所述第一数据写入缓存区;
在所述第一数据成功写入所述缓存区后,判断是否有线程正将所述缓存区的数据写入存储设备;
若无,将所述缓存区中的所有未写入所述存储设备的数据写入所述存储设备;
在所有未写入所述存储设备的数据成功写入所述存储设备后,分别通知被写入所述存储设备的数据各自对应的线程,其对应的数据已成功写入所述存储设备。
一种数据写入装置,包括:
写入请求接收模块,用于接收第一数据的写入请求,将所述第一数据写入缓存区;
判断模块,用于在所述第一数据成功写入所述缓存区后,判断是否有线程正将所述缓存区的数据写入存储设备;
数据写入模块,用于在没有线程正将所述缓存区的数据写入存储设备时,将所述缓存区中的所有未写入所述存储设备的数据写入所述存储设备;
消息发送模块,用于在所有未写入所述存储设备的数据成功写入所述存储设备后,分别通知被写入所述存储设备的数据各自对应的线程,其对应的数据已成功写入所述存储设备。
本发明数据写入方法和装置,多个线程并发处理业务请求,往缓存区中增加数据,一旦该多个线程中的某一个线程将数据成功写入缓存区,即检测是否有线程正在对缓冲区执行刷新到存储设备的操作,若没有,则该线程直接将所有的数据写入存储设备,然后告知用户和其它线程数据写入成功。由于本发明采取缓冲区和多个线程并发处理的模式,所以可以保证数据的高并发和低延时;由于本发明往存储设备写入数据的线程为往缓冲区写入数据的多个线程中的某一个线程,一旦数据成功写入缓冲区则立即将缓冲区的所有数据写入磁盘,无需像现有技术中的第三者线程一样等待定时时间的到达,并且本发明在将数据成功写入存储设备后才告知用户数据写入成功,所以保证了数据的可靠性。
附图说明
图1为本发明数据写入方法实施例的流程示意图;
图2为本发明缓存区具体实施例的示意图;
图3为本发明数据写入装置实施例一的结构示意图;
图4为本发明写入请求接收模块实施例的结构示意图;
图5为本发明数据写入装置实施例二的结构示意图;
图6为本发明数据写入模块实施例的结构示意图。
具体实施方式
为了更好地理解本发明,下面对本发明涉及的几个概念进行简单介绍:
数据可靠性:只要用户写入数据的请求得以成功返回,则该数据必然不会丢失,即使发生服务崩溃或断电,数据也不会丢失,该功能要求称之为可靠性;
线程:为程序执行流的最小单元,每个线程都是作为利用CPU(CentralProcessing 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、指针FE和指针BE均指向最初位置0。
在一个实施例中,接收第一数据的写入请求,将所述第一数据写入缓存区的步骤可以包括:
S1101、接收第一数据的写入请求,检测所述缓冲区是否有未存储数据的区域;
当前线程接收请求调用方的写入数据的请求,需要写入数据到存储设备,如图2所示,首先判断指针BE沿着逆时针方向到指针FS之间是否还有空间。
S1102、若有,将所述第一数据写入所述第一指针所指向的当前位置,然后将所述第一指针由当前位置移动到新位置,其中新位置与当前位置之间的区域存储的数据为所述第一数据;
如果有,则说明缓冲区还能插入数据,将数据放置到BE所指向的位置,然后将BE移动到下一个位置。
S1103、若没有,返回第一数据写入失败的消息。
如果没有,则说明缓冲区已满,系统不能接收请求,返回请求调用方“失败”的消息,结束流程。
在步骤S120和步骤S130中,当前线程将第一数据成功写入缓存区后,可以根据状态标识Flush判断当前有无线程在对缓冲区做“刷新到存储设备”的动作,亦即判断状态标识Flush是否为“True”。
如果状态标识Flush为“True”,说明已有线程在对缓冲区做“刷新到存储设备”的动作,为了不引起存储设备的争用,在一个实施例中,判断是否有线程正将所述缓存区的数据写入存储设备之后,还可以包括步骤:若有线程正将所述缓存区的数据写入存储设备,将所述第一数据对应的线程设置为阻塞状态。也即是将当前线程阻塞,等待被唤醒,当前线程只是将数据插入到缓冲区,而不将数据写入存储设备。
如果状态标识Flush为“False”,说明当前没有线程在对缓冲区做“刷新到存储设备”的动作,则当前线程将缓冲区的未写入所述存储设备的数据一次性写入存储设备。在一个实施例中,将所述缓存区中的所有未写入所述存储设备的数据写入所述存储设备的步骤可以包括:
S1301、将所述第三指针移动至所述第一指针所指向的新位置,并设置所述状态标识为当前正将所述缓存区的数据写入存储设备;
将指针FE设置为指针BE所指向的新位置,设置状态标识flush为“true”,表示已经有线程在对缓冲区做“刷新到存储设备”的动作。
S1302、将所述第二指针和移动后的所述第三指针之间的区域的数据写入所述存储设备。
从指针FS沿着逆时针方向到指针FE的区域为本次需要被刷新到存储设备的区域,使用文件API(Application Programming Interface,应用程序编程接口)将指针FS到指针FE的数据写往存储设备。
在步骤S140中,为了保证写入数据的可靠性,写文件的函数(write)必须是在数据真正被写到磁盘之后,才返回给请求调用方。
当前线程将所有数据成功写入存储设备后,设置状态标识Flush为“false”,同时指针FS移动到指针FE的位置,指针FE移动到指针BE的位置。如果指针FS和指针FE不相等,则说明有数据需要写入,则顺序写该区间段内的数据。
当前线程将所有数据成功写入存储设备后,获得刚才被写入存储设备的FS到FE区域中数据(除第一数据之外)所对应的线程,这些线程目前处于阻塞状态,唤醒他们,即通知对应的线程之前他们在缓冲区中所放置的数据已被成功写入存储设备,被唤醒的线程接收到该通知后,结束请求处理,并告知请求调用方写入数据成功。同时当前线程结束请求处理,告知请求调用方写入数据成功。本发明保证了数据的可靠性,同时减少了存储设备的操作次数,提高了并发,降低了延时。
基于同一发明构思,本发明还提供一种数据写入装置,下面结合附图对本发明装置的具体实施方式做详细描述。
如图3所示,一种数据写入装置,包括:
写入请求接收模块110,用于接收第一数据的写入请求,将所述第一数据写入缓存区;
判断模块120,用于在所述第一数据成功写入所述缓存区后,判断是否有线程正将所述缓存区的数据写入存储设备;
数据写入模块130,用于在没有线程正将所述缓存区的数据写入存储设备时,将所述缓存区中的所有未写入所述存储设备的数据写入所述存储设备;
消息发送模块140,用于在所有未写入所述存储设备的数据成功写入所述存储设备后,分别通知被写入所述存储设备的数据各自对应的线程,其对应的数据已成功写入所述存储设备。
本发明在保证数据可靠性的前提之下提高了并发和降低了延时,为了更好地理解本发明方案,下面对本发明装置的各个模块的功能进行详细介绍。
首先对本发明定义的数据结构进行简单介绍。本发明定义的数据结构为一环形队列。在缓冲区中写入数据时可以逆时针写入,也可以顺时针写入。为了更好地理解本发明定义的数据结构,下面以逆时针写入为例进行说明。
如图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、指针FE和指针BE均指向最初位置0。
在一个实施例中,如图4所示,所述写入请求接收模块110可以包括:
空间检测单元1101,用于接收第一数据的写入请求,检测所述缓冲区是否有未存储数据的区域;如图2所示,即判断指针BE沿着逆时针方向到指针FS之间是否还有空间;
第一数据写入单元1102,用于在有未存储数据的区域时,将所述第一数据写入所述第一指针所指向的当前位置,然后将所述第一指针由当前位置移动到新位置,其中新位置与当前位置之间的区域存储的数据为所述第一数据;即将数据放置到BE所指向的位置,然后将BE移动到下一个位置;
失败消息返回单元1103,用于在没有未存储数据的区域时,返回第一数据写入失败的消息。
所述判断模块120在第一数据成功写入缓存区后,可以根据状态标识Flush判断当前有无线程在对缓冲区做“刷新到存储设备”的动作,亦即判断状态标识Flush是否为“True”。
如果状态标识Flush为“True”,说明已有线程在对缓冲区做“刷新到存储设备”的动作,为了不引起存储设备的争用,在一个实施例中,如图5所示,本发明装置还可以包括与所述判断模块120相连的线程阻塞模块150,所述线程阻塞模块150用于在有线程正将所述缓存区的数据写入存储设备时,将所述第一数据对应的线程设置为阻塞状态。
如果状态标识Flush为“False”,说明当前没有线程在对缓冲区做“刷新到存储设备”的动作,数据写入模块130将缓冲区的未写入所述存储设备的数据一次性写入存储设备。在一个实施例中,如图6所示,所述数据写入模块130可以包括:
设置单元1301,用于将所述第三指针移动至所述第一指针所指向的新位置,并设置所述状态标识为当前正将所述缓存区的数据写入存储设备;即将指针FE设置为指针BE所指向的新位置,设置状态标识flush为“true”,
数据写入单元1302,用于将所述第二指针和移动后的所述第三指针之间的区域的数据写入所述存储设备;从指针FS沿着逆时针方向到指针FE的区域为本次需要被刷新到存储设备的区域,使用文件API将指针FS到指针FE的数据写往存储设备。
当前线程将所有数据成功写入存储设备后,消息发送模块140设置状态标识Flush为“false”,同时指针FS移动到指针FE的位置,指针FE移动到指针BE的位置。
当前线程将所有数据成功写入存储设备后,消息发送模块140获得刚才被写入存储设备的FS到FE区域中数据(除第一数据之外)所对应的线程,这些线程目前处于阻塞状态,唤醒他们,即通知对应的线程之前他们在缓冲区中所放置的数据已被成功写入存储设备,被唤醒的线程接收到该通知后,结束请求处理,并告知请求调用方写入数据成功。同时当前线程结束请求处理,告知请求调用方写入数据成功。本发明保证了数据的可靠性,同时减少了存储设备的操作次数,提高了并发,降低了延时。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (8)
1.一种数据写入方法,其特征在于,包括步骤:
接收第一数据的写入请求,将所述第一数据写入缓存区;所述第一数据是多个线程并发向缓存区中写入的数据中的其中一线程对应的数据;
在所述第一数据成功写入所述缓存区后,根据状态标识Flush判断是否有线程正将所述缓存区的数据写入存储设备;
若有线程正将所述缓存区的数据写入存储设备,将所述第一数据对应的线程设置为阻塞状态;
若无,通过所述第一数据写入缓存区对应的线程将所述缓存区中的所有未写入所述存储设备的数据写入所述存储设备;
在所有未写入所述存储设备的数据成功写入所述存储设备后,分别通知被写入所述存储设备的数据各自对应的线程,其对应的数据已成功写入所述存储设备。
2.根据权利要求1所述的数据写入方法,其特征在于,所述缓存区包括第一指针、第二指针、第三指针和状态标识Flush;所述第一指针用于标识所述缓存区中待写入数据的位置,所述状态标识Flush用于标识当前是否正将所述缓存区的数据写入存储设备,所述第一指针和所述第二指针之间的区域为未存储数据的区域,所述第二指针和所述第三指针之间的区域为数据正在写入存储设备的区域,所述第三指针和所述第一指针之间的区域为数据还未写入存储设备的区域。
3.根据权利要求2所述的数据写入方法,其特征在于,接收第一数据的写入请求,将所述第一数据写入缓存区的步骤包括:
接收第一数据的写入请求,检测所述缓存区是否有未存储数据的区域;
若有,将所述第一数据写入所述第一指针所指向的当前位置,然后将所述第一指针由当前位置移动到新位置,其中新位置与当前位置之间的区域存储的数据为所述第一数据;
若没有,返回第一数据写入失败的消息。
4.根据权利要求2所述的数据写入方法,其特征在于,将所述缓存区中的所有未写入所述存储设备的数据写入所述存储设备的步骤包括:
将所述第三指针移动至所述第一指针所指向的新位置,并设置所述状态标识Flush为当前正将所述缓存区的数据写入存储设备;
将所述第二指针和移动后的所述第三指针之间的区域的数据写入所述存储设备。
5.一种数据写入装置,其特征在于,包括:
写入请求接收模块,用于接收第一数据的写入请求,将所述第一数据写入缓存区;所述第一数据是多个线程并发向缓存区中写入的数据中的其中一线程对应的数据;
判断模块,用于在所述第一数据成功写入所述缓存区后,根据状态标识Flush判断是否有线程正将所述缓存区的数据写入存储设备;
与所述判断模块相连的线程阻塞模块,所述线程阻塞模块用于在有线程正将所述缓存区的数据写入存储设备时,将所述第一数据对应的线程设置为阻塞状态;
数据写入模块,用于在没有线程正将所述缓存区的数据写入存储设备时,通过所述第一数据写入缓存区对应的线程将所述缓存区中的所有未写入所述存储设备的数据写入所述存储设备;
消息发送模块,用于在所有未写入所述存储设备的数据成功写入所述存储设备后,分别通知被写入所述存储设备的数据各自对应的线程,其对应的数据已成功写入所述存储设备。
6.根据权利要求5所述的数据写入装置,其特征在于,所述缓存区包括第一指针、第二指针、第三指针和状态标识Flush;所述第一指针用于标识所述缓存区中待写入数据的位置,所述状态标识Flush用于标识当前是否正将所述缓存区的数据写入存储设备,所述第一指针和所述第二指针之间的区域为未存储数据的区域,所述第二指针和所述第三指针之间的区域为数据正在写入存储设备的区域,所述第三指针和所述第一指针之间的区域为数据还未写入存储设备的区域。
7.根据权利要求6所述的数据写入装置,其特征在于,所述写入请求接收模块包括:
空间检测单元,用于接收第一数据的写入请求,检测所述缓存区是否有未存储数据的区域;
第一数据写入单元,用于在有未存储数据的区域时,将所述第一数据写入所述第一指针所指向的当前位置,然后将所述第一指针由当前位置移动到新位置,其中新位置与当前位置之间的区域存储的数据为所述第一数据;
失败消息返回单元,用于在没有未存储数据的区域时,返回第一数据写入失败的消息。
8.根据权利要求6所述的数据写入装置,其特征在于,所述数据写入模块包括:
设置单元,用于将所述第三指针移动至所述第一指针所指向的新位置,并设置所述状态标识Flush为当前正将所述缓存区的数据写入存储设备;
数据写入单元,用于将所述第二指针和移动后的所述第三指针之间的区域的数据写入所述存储设备。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610509122.2A CN106055281B (zh) | 2016-06-29 | 2016-06-29 | 数据写入方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610509122.2A CN106055281B (zh) | 2016-06-29 | 2016-06-29 | 数据写入方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106055281A CN106055281A (zh) | 2016-10-26 |
CN106055281B true CN106055281B (zh) | 2020-02-18 |
Family
ID=57200577
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610509122.2A Active CN106055281B (zh) | 2016-06-29 | 2016-06-29 | 数据写入方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106055281B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108132757B (zh) * | 2016-12-01 | 2021-10-19 | 阿里巴巴集团控股有限公司 | 数据的存储方法、装置及电子设备 |
CN109543476B (zh) * | 2018-11-14 | 2022-02-22 | 捷德(中国)科技有限公司 | 数据处理方法、装置及存储介质 |
CN111142786B (zh) * | 2019-11-29 | 2022-07-12 | 苏州浪潮智能科技有限公司 | 一种数据写入方法、装置及计算机可读存储介质 |
CN112256200A (zh) * | 2020-10-21 | 2021-01-22 | 宝能(广州)汽车研究院有限公司 | 数据读写方法和存储介质 |
CN113608681B (zh) * | 2021-06-30 | 2023-03-21 | 苏州浪潮智能科技有限公司 | 一种数据存储方法、系统、设备以及介质 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101256524A (zh) * | 2007-12-17 | 2008-09-03 | 浪潮电子信息产业股份有限公司 | 一种保持文件系统缓存一致性的方法 |
CN101668036B (zh) * | 2009-09-22 | 2012-07-25 | 成都市华为赛门铁克科技有限公司 | 分布式设备的模拟系统和模拟分布式设备处理业务的方法 |
CN102012793B (zh) * | 2010-11-12 | 2013-01-23 | 浪潮(北京)电子信息产业有限公司 | 镜像实现方法和装置 |
CN102799392B (zh) * | 2012-06-16 | 2015-12-16 | 北京忆恒创源科技有限公司 | 存储设备及其中断控制方法 |
KR101420292B1 (ko) * | 2012-10-09 | 2014-07-21 | 주식회사 시큐아이 | 데이터 구조 및 이를 이용한 데이터 처리 방법 |
CN103023879B (zh) * | 2012-11-26 | 2015-11-18 | 国电南瑞科技股份有限公司 | 一种基于高速缓存的数据中心间广域数据同步方法 |
-
2016
- 2016-06-29 CN CN201610509122.2A patent/CN106055281B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN106055281A (zh) | 2016-10-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106055281B (zh) | 数据写入方法和装置 | |
US9317434B2 (en) | Managing out-of-order memory command execution from multiple queues while maintaining data coherency | |
US9507652B2 (en) | Synchronizing communication over shared memory | |
US9299400B2 (en) | Distributed row hammer tracking | |
CN110018914B (zh) | 基于共享内存的消息采集方法及装置 | |
CN111949568B (zh) | 一种报文处理方法、装置及网络芯片 | |
US11210229B2 (en) | Method, device and computer program product for data writing | |
WO2014004111A1 (en) | Row hammer condition monitoring | |
CN111427859B (zh) | 一种消息处理方法、装置、电子设备及存储介质 | |
CN107506266B (zh) | 一种数据恢复方法及系统 | |
US20150213105A1 (en) | Data processing method, apparatus, and storage medium | |
CN110858188A (zh) | 具有分布式信箱结构的多处理器系统及其沟通方法 | |
CN102855214B (zh) | 实现数据一致性的方法和一种多核系统 | |
US8281103B2 (en) | Method and apparatus for allocating storage addresses | |
EP3680787A1 (en) | Method for synchronization between primary database and standby database, database system and device | |
CN107239238B (zh) | 一种基于分布式锁的存储的io操作方法及装置 | |
CN107277022B (zh) | 进程标记方法及装置 | |
CN112395097A (zh) | 一种消息处理方法、装置、设备和存储介质 | |
CN111966511B (zh) | 消息队列数据读写处理方法及装置 | |
CN110168644B (zh) | 用于在存储体存储器单元阵列中提供行篡改保护的系统、方法和计算机程序 | |
CN116401077A (zh) | 一种基于缓存队列的数据处理方法与相关装置 | |
CN111930528A (zh) | 消息中间件的消息写入方法、装置、设备及可读存储介质 | |
CN107203339B (zh) | 一种数据存储方法及装置 | |
CN110457133A (zh) | 一种操作系统资源异常的处理方法及系统 | |
US20080162823A1 (en) | System and method for handling multiple aliased shadow register numbers to enhance lock acquisition |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
EE01 | Entry into force of recordation of patent licensing contract |
Application publication date: 20161026 Assignee: GUANGZHOU CUBESILI INFORMATION TECHNOLOGY Co.,Ltd. Assignor: GUANGZHOU HUADUO NETWORK TECHNOLOGY Co.,Ltd. Contract record no.: X2021980000151 Denomination of invention: Data writing method and device Granted publication date: 20200218 License type: Common License Record date: 20210107 |
|
EE01 | Entry into force of recordation of patent licensing contract |