CN112905609B - 数据插入方法、装置、执行单元、系统、设备及存储介质 - Google Patents
数据插入方法、装置、执行单元、系统、设备及存储介质 Download PDFInfo
- Publication number
- CN112905609B CN112905609B CN201911226694.XA CN201911226694A CN112905609B CN 112905609 B CN112905609 B CN 112905609B CN 201911226694 A CN201911226694 A CN 201911226694A CN 112905609 B CN112905609 B CN 112905609B
- Authority
- CN
- China
- Prior art keywords
- data
- linked list
- conflicts
- execution unit
- temporary linked
- 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
- 238000012966 insertion method Methods 0.000 title claims abstract description 29
- 238000003780 insertion Methods 0.000 claims abstract description 148
- 230000037431 insertion Effects 0.000 claims abstract description 148
- 238000000034 method Methods 0.000 claims abstract description 17
- 238000001514 detection method Methods 0.000 claims description 26
- 238000010586 diagram Methods 0.000 description 12
- 238000004891 communication Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 2
- 230000007547 defect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供一种数据插入方法、装置、执行单元、系统、设备及存储介质,其中方法包括:将第一待插入数据插入临时链表;所述临时链表除所述第一待插入数据还插入有至少一个待插入数据,插入所述临时链表的待插入数据对应的执行单元并发执行数据插入操作;检测所述第一待插入数据与所述至少一个待插入数据及所述数据集中的数据是否冲突;若所述第一待插入数据与所述至少一个待插入数据,及所述数据集中的数据不冲突,将所述第一待插入数据插入所述数据集。本发明实施例可实现多个执行单元并发执行数据插入操作,提升计算资源的利用率,同时避免并发插入数据集的数据存在冲突的情况,可实现高效、准确的数据插入。
Description
技术领域
本发明实施例涉及数据处理技术领域,具体涉及一种数据插入方法、装置、执行单元、系统、设备及存储介质。
背景技术
随着数据量的不断增多,数据集中的数据更新越来越频繁,数据插入是对数据集进行数据更新的一种方式,即通过在数据集中插入数据,可实现对数据集新增数据。
可见,数据插入效率对于数据集的数据更新效率存在极大的影响,因此如何优化数据插入方式,以提升数据插入效率,一直是本领域技术人员研究的热点。
发明内容
有鉴于此,本发明实施例提供一种数据插入方法、装置、执行单元、系统、设备及存储介质,以提升数据插入效率。
为实现上述目的,本发明实施例提供如下技术方案:
一种数据插入方法,包括:
将第一待插入数据插入临时链表;所述临时链表除所述第一待插入数据还插入有至少一个待插入数据,插入所述临时链表的待插入数据对应的执行单元并发执行数据插入操作;
检测所述第一待插入数据与所述至少一个待插入数据及所述数据集中的数据是否冲突;
若所述第一待插入数据与所述至少一个待插入数据,及所述数据集中的数据不冲突,将所述第一待插入数据插入所述数据集。
本发明实施例还提供一种数据插入装置,包括:
第一插入模块,用于将第一待插入数据插入临时链表;所述临时链表除所述第一待插入数据还插入有至少一个待插入数据,插入所述临时链表的待插入数据对应的执行单元并发执行数据插入操作;
检测模块,用于检测所述第一待插入数据与所述至少一个待插入数据及所述数据集中的数据是否冲突;
第二插入模块,用于若所述第一待插入数据与所述至少一个待插入数据,及所述数据集中的数据不冲突,将所述第一待插入数据插入所述数据集。
本发明实施例还提供一种执行单元,所述执行单元被配置为执行上述所述的数据插入方法。
本发明实施例还提供一种数据插入系统,包括:数据集,临时链表,及并发执行的多个如上述所述的执行单元;其中,所述临时链表保存多个所述的执行单元的待插入数据。
本发明实施例还提供一种设备,包括:多个处理器核心和至少一个存储器;所述存储器存储程序,所述多个处理器核心调用所述程序,执行上述所述的数据插入方法。
本发明实施例还提供一种存储介质,所述存储介质存储执行上述所述的数据插入方法的程序。
本发明实施例提供的数据插入方法以多个执行单元并发执行数据插入操作为基础,通过设置临时链表保存并发插入的待插入数据,执行单元可将其需操作的第一待插入数据插入临时链表,从而执行单元可检测所述第一待插入数据与临时链表中除所述第一待插入数据还插入的至少一个待插入数据是否冲突,以及检测所述第一待插入数据与数据集中的数据是否冲突;进而,检测单元在检测结果为否时,可将所述第一待插入数据插入所述数据集,实现在数据集中插入数据。
可以看出,本发明实施例通过设置临时链表,可使执行单元先将待插入数据插入临时链表,进而检测待插入数据与临时链表插入的其他待插入数据是否冲突,在多个执行单元并发执行数据插入操作时,实现检测多个执行单元的待插入数据之间是否存在冲突;从而,本发明实施例可在待插入数据之间不存在冲突,且待插入数据与数据集中的数据不冲突时,将待插入数据插入到数据集中。本发明实施例可实现多个执行单元并发执行数据插入操作,提升计算资源的利用率,同时避免并发插入数据集的数据存在冲突的情况,可实现高效、准确的数据插入。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为串行执行数据插入操作的过程示例图;
图2为本发明实施例提供的数据插入系统的示意图;
图3为本发明实施提供的数据插入过程的示例图;
图4为本发明实施例提供的数据插入方法的流程图;
图5为临时链表的示例图;
图6为本发明实施例提供的数据插入方法的另一流程图;
图7为本发明实施例提供的应用示例图;
图8为本发明实施例提供的数据插入装置的框图;
图9为本发明实施例提供的数据插入装置的另一框图;
图10为本发明实施例提供的设备的硬件框图。
具体实施方式
数据插入主要由执行单元执行实现,执行单元可以是执行数据插入操作的最小执行单位,一般而言,一个执行单元对一个待插入数据执行数据插入操作,执行单元例如线程等;执行单元在执行数据插入操作时,执行单元可检测待插入数据与数据集中已有的数据是否冲突,若否,则执行单元将待插入数据插入到数据集中,数据插入成功,若是,则执行单元取消将待插入数据插入到数据集中,数据插入失败。
在多个执行单元执行数据插入操作的场景下,为避免执行单元并发执行数据插入操作时,多个执行单元的待插入数据之间存在冲突的情况,多个执行单元下的数据插入操作主要基于串行执行实现,即执行单元以串行执行方式实现数据插入操作,下一执行单元需等待上一执行单元在数据集中数据插入成功或数据插入失败后,才能执行数据插入操作;
常见的解决多个执行单元的待插入数据之间存在冲突的方式是,执行单元在执行数据插入操作时对数据集的索引加锁,使得其他执行单元无法对数据集执行数据插入操作,进而避免待插入数据之间存在冲突;一种示例的执行单元串行执行数据插入操作的过程可如图1所示:
执行单元11执行数据插入操作时,执行单元11对数据集的索引加锁,然后,执行单元11检测待插入数据a1与数据集中已有的数据是否冲突,若否,将待插入数据a1插入数据集中,若是,则丢弃待插入数据a1,进而执行单元11释放索引的锁;
由于执行单元11对数据集的索引加锁,执行单元12需等待执行单元11释放索引的锁后,才能数据插入操作;索引的锁释放后,执行单元12对数据集的索引加锁,使得其他执行单元无法针对数据集执行数据插入操作,然后执行单元12检测待插入数据a2与数据集中已有的数据是否冲突,若否,将待插入数据a2插入数据集中,若是,则丢弃待插入数据a2,进而线程2释放索引的锁。
可以想见的是,如果上述过程中没有对数据集的索引加锁,执行单元11与执行单元12并发执行,假设待插入数据a1、待插入数据a2与数据集中已有的数据不冲突,但待插入数据a1与待插入数据a2之间冲突,那么在执行单元11与执行单元12并发执行时,将存在相冲突的待插入数据a1与待插入数据a2并发插入数据集的情况,导致数据插入错误。
可见,上述执行单元串行执行数据插入操作的过程,可以避免执行单元并发执行数据插入操作时,待插入数据之间存在冲突的情况,如避免执行单元11操作的待插入数据a1与执行单元12操作的待插入数据a2存在冲突的情况,在一定的程度上保障数据插入的准确性;但是上述执行单元串行执行数据插入的过程,需要下一执行单元等待上一执行单元完成数据插入操作后才能执行数据插入操作,且下一执行单元极大的时间都花费在等待拿锁上,这导致计算资源的利用率有限,数据插入效率较低。
基于此,本发明实施例提供一种优化的数据插入方案,以提升数据插入效率,实现高效、准确的数据插入。下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供的数据插入方案提出以执行单元并发执行数据插入操作为基础,并通过改进的冲突检测方式,检测执行单元并发执行数据插入操作时,待插入数据之间是否存在冲突,从而在待插入数据之间存在冲突时,取消将待插入数据插入数据集,在待插入数据之间不存在冲突时,实现将待插入数据插入数据集,可达到高效、准确的数据插入效果。作为一种可选实现,图2示出了本发明实施例提供的数据插入系统的一种示意图,图2所示可以认为是实现本发明实施例提供的数据插入方案的示例组件,如图2所示,该系统可以包括:数据集10,临时链表20,多个执行单元30;
其中,临时链表20是本发明实施例提出的用于检测并发执行的执行单元的待插入数据之间是否存在冲突的数据结构,在多个执行单元30并发执行数据插入操作的过程中,任一执行单元可将待插入数据插入到临时链表20中,如此临时链表20可以存储并发执行的执行单元的多个待插入数据,这些多个待插入数据是准备并发插入数据集的数据;
从而,任一执行单元可基于临时链表20中插入的待插入数据,检测执行单元需插入的待插入数据,与临时链表中插入的其他待插入数据是否存在冲突;从而在执行单元将待插入数据正式插入数据集之前,可以实现待插入数据之间的冲突检测,避免并发插入数据集的待插入数据之间存在冲突的情况,提升数据插入准确性。
需要说明的是,本发明实施例所指的执行单元并发执行可以认为是,执行单元可以即时执行数据插入操作,而不必等待上一执行单元完成数据插入操作;可以理解的是,在数据库或缓存服务的内核中,对数据集插入数据的需求是不断存在的,因此需要执行单元不断的进行数据插入操作,在本发明实施例中,执行单元可不必等待上一执行单元完成数据插入操作,而是可即时执行数据插入操作;也就是说,本发明实施例所指的并发执行允许数据插入操作具有前后顺序,但执行单元是即时执行各自的数据插入操作,而不必等待上一执行单元完成数据操作,当然,并发执行也可能是多个执行单元同时开始数据插入操作,并各自完成数据插入操作。
基于图2所示系统,下面以并发执行数据插入操作的多个执行单元中的第一执行单元和第二执行单元为例,对本发明实施提供的数据插入过程进行说明。示例的,第一执行单元例如并发执行数据插入操作的多个线程中的第一线程,第二执行单元例如并发执行数据插入操作的多个线程中的第二线程。
假设第二执行单元先于第一执行单元开始数据插入操作,作为一种示例,图3示例了本发明实施提供的一种可选的数据插入过程,为便于区别第二执行单元和第一执行单元的操作,图3中以实线的箭头线条表示第二执行单元的操作,以虚线的箭头线条表示第一执行单元的操作,如图3所示,本发明实施例提供的数据插入过程可以包括:
步骤S1、第二执行单元将第二待插入数据插入临时链表。
步骤S2、第一执行单元将第一待插入数据插入临时链表。
在本发明实施例中,第一执行单元用于执行数据插入操作,将第一待插入数据插入数据集,第二执行单元用于执行数据插入操作,将第二待插入数据插入数据集。
在本发明实施例的示例中,第二执行单元先于第一执行单元执行数据插入操作,因此第二待插入数据先于第一待插入数据插入临时链表,在第一执行单元将第一待插入数据插入临时链表时,临时链表中已插入有第二待插入数据。可选的,本发明实施例可以是第二执行单元将第二待插入数据插入临时链表后,第一执行单元开始执行数据插入操作,当然,第一执行单元也可以是在第二执行单元将第二待插入数据成功或失败插入数据集前的任一阶段,开始执行数据插入操作,第一执行单元开始执行数据插入操作的时机并不限于本示例。
步骤S3、第二执行单元检测第二待插入数据与所述临时链表插入的待插入数据及所述数据集中的数据是否冲突。
在第二执行单元将第二待插入数据插入临时链表前,临时链表可能插入有其他待插入数据,由于本发明实施例中执行单元是并发执行数据插入操作,因此临时链表中先于第二待插入数据插入的其他待插入数据,可能先于第二待插入数据插入数据集;基于此,第二执行单元可检测第二待插入数据与临时链表中已插入的待插入数据是否冲突,以实现待插入数据之间的冲突检测;进一步,第二执行单元还可检测第二待插入数据与数据集中已有的数据是否冲突。
步骤S4、第一执行单元检测第一待插入数据与所述临时链表插入的待插入数据,及所述数据集中的数据是否冲突。
在本发明实施例的示例中,第二待插入数据先于第一待插入数据插入临时链表,因此在第一待插入数据插入临时链表时,临时链表插入的待插入数据包含了第二待插入数据;本发明实施例可在检测第一待插入数据与所述临时链表插入的待插入数据是否冲突的过程中,检测出第一待插入数据与第二待插入数据是否冲突,以及第一待插入数据与临时链表插入的其他待插入数据是否冲突,从而实现待插入数据之间的冲突检测。进一步,第一执行单元还可检测第一待插入数据与数据集中已有的数据是否冲突。
步骤S5、第二执行单元检测第二待插入数据与所述临时链表插入的待插入数据,及所述数据集中的数据不冲突时,将第二待插入数据插入所述数据集。
在本发明实施例中,第二执行单元检测到第二待插入数据与所述临时链表插入的待插入数据不冲突,说明待插入数据之间不冲突;同时,第二执行单元检测到第二待插入数据与所述数据集中的数据不冲突,则第二执行单元可将第二待插入数据插入到所述数据集,实现在数据集中插入第二待插入数据。
步骤S6、第二执行单元从所述临时链表中移除第二待插入数据。
第二执行单元在数据集插入第二待插入数据后,第二待插入数据成为所述数据集中的数据,从而第二执行单元可从临时链表中移除第二待插入数据。当然,步骤S6仅是可选步骤,本发明实施例也可选择不执行步骤S6。
可选的,如果第二执行单元检测到第二待插入数据与所述临时链表插入的待插入数据冲突(即待插入数据之间存在冲突),和/或,第二待插入数据与数据集中的数据冲突,则第二执行单元可确定第二待插入数据插入失败。可选的,进一步,第二执行单元可在确定第二待插入数据插入失败时,从所述临时链表中移除第二待插入数据。
步骤S7、第一执行单元检测第一待插入数据与所述临时链表插入的待插入数据,及所述数据集中的数据不冲突时,将第一待插入数据插入所述数据集。
在本发明实施例中,第一执行单元检测到第一待插入数据与所述临时链表插入的待插入数据不冲突,说明第一待插入数据与先于第一待插入数据插入临时链表的待插入数据(包含第二待插入数据)不冲突,即待插入数据之间不冲突;同时,第一执行单元检测到第一待插入数据与所述数据集中的数据不冲突,则第一执行单元可将第一待插入数据插入到所述数据集。
步骤S8、第一执行单元从所述临时链表中移除第一待插入数据。
在数据集插入第一待插入数据后,第一待插入数据成为所述数据集中的数据,从而第一执行单元可从临时链表中移除第一待插入数据。当然,步骤S8仅是可选步骤,本发明实施例也可选择不执行步骤S8。
可选的,如果第一执行单元检测到第一待插入数据与所述临时链表插入的待插入数据冲突(即待插入数据之间存在冲突,例如第一待插入数据与第二待插入数据冲突等),和/或,第一待插入数据与数据集中的数据冲突,则第一执行单元可确定第一待插入数据插入失败。可选的,进一步,第一执行单元可在确定第一待插入数据插入失败时,从所述临时链表中移除第一待插入数据。
可以看出,本发明实施例的冲突检测至少分为两个部分:一、待插入数据与临时链表中插入的其他待插入数据的冲突检测,此阶段的冲突检测能够在待插入数据正式插入数据集前,预判出待插入数据之间是否冲突,即执行单元需插入数据集的待插入数据与并发插入的其他待插入数据是否冲突;二、待插入数据与数据集中的数据的冲突检测。
基于图3示例过程,可以看出,本发明实施例在需将第一待插入数据和第二待插入数据插入数据集时,如果第一待插入数据与第二待插入数据存在冲突,则通过临时链表的设置,第一执行单元可检测到第一待插入数据与先于第一待插入数据插入临时链表的第二待插入数据相冲突,实现在执行单元并发执行数据插入操作时,待插入数据之间是否存在冲突的检测;进而,第一执行单元可取消将第一待插入数据插入到数据集中,实现在多个执行单元并发执行数据插入操作时,高效、准确的数据插入。
在另一种可选实现中,第二执行单元与第一执行单元也可同时开始数据插入操作,第二待插入数据与第一待插入数据可同时插入到临时链表中,此时的数据插入的基本流程与图3类似,只是第二执行单元在检测第二待插入数据与所述临时链表插入的待插入数据是否冲突时,可以同时检测到第二待插入数据与所述临时链表插入的第一待插入数据是否冲突,即在检测第二待插入数据与所述临时链表插入的待插入数据是否冲突时,包含检测了第二待插入数据与第一待插入数据是否冲突。
站在第一执行单元的角度,本发明实施例提供的数据插入方法的可选流程可如图4所示,需要说明的是,第一执行单元可以是多个执行单元中的任一执行单元,在第一执行单元开始执行数据插入操作之前可能已存在正在执行数据插入操作的执行单元,也可能存在与第一执行单元同时开始执行数据插入操作的其他执行单元;参照图4,本发明实施例提供的数据插入方法的可选流程可以包括:
步骤S100、将第一待插入数据插入临时链表;其中,所述临时链表除所述第一待插入数据还插入有至少一个待插入数据,插入所述临时链表的待插入数据对应的执行单元并发执行数据插入操作。
在第一执行单元执行数据插入操作时,第一执行单元可先将第一待插入数据插入临时链表;临时链表中除第一待插入数据外还插入有至少一个待插入数据,所述至少一个待插入数据可以先于第一待插入数据插入临时链表,例如图3示例中第二待插入数据先于第一待插入数据插入临时链表,所述至少一个待插入数据也可以是与第一待插入数据同时插入临时链表,例如第二待插入数据与第一待插入数据同时插入临时链表。
在本发明实施例中,多个执行单元并发执行数据插入操作,而不必等待上一执行单元完成数据插入操作,因此这些插入所述临时链表的待插入数据对应的执行单元是并发执行数据插入操作。
在一种可选实现中,临时链表可以是一种从链表头部到链表尾部顺序排列数据的结构,任一待插入数据在插入临时链表时,均是插入临时链表的尾部,从而在临时链表的尾部形成一个保存待插入数据的节点,一个节点对应保存一个待插入数据;
在一种示例中,临时链表的结构示例可如图5所示,如图5所示,临时链表中的待插入数据,根据待插入数据插入临时链表的插入顺序,从链表头部到链表尾部顺序排列;如图5示例,在第一执行单元执行数据插入操作之前,临时链表已插入有待插入数据1-4,且待插入数据1-4在插入临时链表时,均从临时链表的尾部插入,从而待插入数据1-4可以根据插入顺序从链表头部到链表尾部顺序排列,当第一执行单元执行数据插入操作,要在临时链表插入待插入数据5时,待插入数据5也是从临时链表的尾部插入,从而保持待插入数据5根据插入顺序在临时链表中排列。
当然,上述示例的临时链表的结构仅是可选的,本发明实施例也可设置临时链表具有其他的结构,只要临时链表的结构,能够保障第一执行单元在将第一待插入数据插入临时链表时,第一执行单元线程能够通过临时链表确定出先前插入临时链表、但还未插入数据集的待插入数据即可。
步骤S110、检测所述第一待插入数据与所述至少一个待插入数据及所述数据集中的数据是否冲突,若否,执行步骤S120,若是,执行步骤S130。
如前文所述,本发明实施例的冲突检测至少分为两个部分:一、待插入数据与临时链表中插入的其他待插入数据的冲突检测,以检测并发执行的多个执行单元的待插入数据之间是否冲突;二、待插入数据与数据集中的数据的冲突检测。因此,第一执行单元在将第一待插入数据插入临时链表后,可检测第一待插入数据与临时链表插入的所述至少一个待插入数据是否冲突,以及第一待插入数据与数据集中的数据是否冲突。
作为优选方式,本发明实施例也可先检测第一待插入数据与所述至少一个待插入数据是否冲突,在检测结果为否时,再检测第一待插入数据与数据集中的数据是否冲突;
在另一种可选的实现中,本发明实施例也可同时检测第一待插入数据与所述至少一个待插入数据和数据集中的数据是否冲突;当然,本发明实施例也可支持先检测第一待插入数据与数据集中的数据是否冲突,然后在检测结果为否时,再检测第一待插入数据与所述至少一个待插入数据是否冲突。
可选的,在本发明实施例中,数据可以是以键值对形式表示;在检测所述第一待插入数据与所述至少一个待插入数据是否冲突时,第一检测单元可检测所述第一待插入数据的键值对,与所述至少一个待插入数据的键值对是否相同;其中,键值对相同,则所述第一待插入数据与所述至少一个待插入数据冲突,键值对不同,则所述第一待插入数据与所述至少一个待插入数据不冲突;
可选的,在检测所述第一待插入数据与所述数据集中的数据是否冲突时,第一执行单元可检测所述第一待插入数据的键值对,与所述数据的键值对是否相同;其中,键值对相同,则所述第一待插入数据与所述数据集中的数据冲突,键值对不同,则所述第一待插入数据与所述数据集中的数据不冲突。
步骤S120、将所述第一待插入数据插入所述数据集。
步骤S110的检测结果为否表示:第一待插入数据与所述至少一个待插入数据及所述数据集中的数据均不冲突;从而第一执行单元可将第一待插入数据插入数据集。
可选的,进一步,在执行步骤S120之后,第一执行单元可从所述临时链表中移除所述第一待插入数据。
步骤S130、确定第一待插入数据插入失败。
步骤S110的检测结果为是表示:第一待插入数据与所述至少一个待插入数冲突(即第一待插入数据与其他并发插入的待插入数据存在冲突),和/或,第一待插入数据与所述数据集中的数据冲突;从而第一执行单元可取消将第一待插入数据插入数据集,确定第一待插入数据插入失败。
可选的,进一步,在执行步骤S130之后,或者执行步骤S130的同时,或者确定步骤S110的检测结果为是时,第一执行单元可从所述临时链表中移除所述第一待插入数据。
本发明实施例提供的数据插入方法以多个执行单元并发执行数据插入操作为基础,通过设置临时链表保存并发插入的待插入数据,执行单元可将其需操作的第一待插入数据插入临时链表,从而执行单元可检测所述第一待插入数据与临时链表中除所述第一待插入数据还插入的至少一个待插入数据是否冲突,以及检测所述第一待插入数据与数据集中的数据是否冲突;进而,检测单元在检测结果为否时,可将所述第一待插入数据插入所述数据集,实现在数据集中插入数据。
可以看出,本发明实施例通过设置临时链表,可使执行单元先将待插入数据插入临时链表,进而检测待插入数据与临时链表插入的其他待插入数据是否冲突,在多个执行单元并发执行数据插入操作时,实现检测多个执行单元的待插入数据之间是否存在冲突;从而,本发明实施例可在待插入数据之间不存在冲突,且待插入数据与数据集中的数据不冲突时,将待插入数据插入到数据集中。本发明实施例可实现多个执行单元并发执行数据插入操作,提升计算资源的利用率,同时避免并发插入数据集的数据存在冲突的情况,可实现高效、准确的数据插入。
可选的,本发明实施例可先检测第一待插入数据与临时链表插入的至少一个待插入数据是否冲突,然后检测第一待插入数据与数据集中的数据是否冲突;作为一种可选实现,图6示出了本发明实施例提供的数据插入方法的另一可选流程,站在第一执行单元的角度,该流程可以包括:
步骤S200、将第一待插入数据插入临时链表。
所述临时链表除所述第一待插入数据还插入有至少一个待插入数据,插入所述临时链表的待插入数据对应的执行单元并发执行数据插入操作。
步骤S210、检测第一待插入数据与所述至少一个待插入数据是否冲突,若是,执行步骤S220,若否,执行步骤S230。
在一种示例中,基于图5所示的临时链表中的待插入数据根据插入顺序,从链表头部到链表尾部顺序排列,本发明实施例可在检测第一待插入数据与所述至少一个待插入数据是否冲突时,根据临时链表中待插入数据的排列顺序,将第一待插入数据依次与所述至少一个待插入数据进行冲突检测;
例如,第一执行单元可从所述第一待插入数据在所述临时链表的插入位置开始,向链表头部遍历待插入数据,从而检测所述第一待插入数据与所遍历的待插入数据是否冲突;结合图5所示,第一执行单元可依次遍历到待插入数据4,3,2和1,从而第一执行单元可依次检测第一待插入数据与待插入数据4,3,2和1是否冲突;
在另一实现中,第一执行单元也可从链表头部开始,向所述第一待插入数据在所述临时链表的插入位置遍历待插入数据,从而检测所述第一待插入数据与所遍历的待插入数据是否冲突;结合图5所示,第一执行单元可依次遍历到待插入数据1,2,3和4,从而第一执行单元可依次检测第一待插入数据与待插入数据1,2,3和4是否冲突;
可选的,第一执行单元在检测到第一待插入数据与当前遍历到的待插入数据存在冲突时,则可停止在临时链表中继续遍历待插入数据,确定第一待插入数据与所述至少一个待插入数据冲突,执行步骤S220。
当然,上述说明的检测第一待插入数据与所述至少一个待插入数据是否冲突的方式仅是可选的,本发明实施例还可支持其他的检测第一待插入数据与所述至少一个待插入数据是否冲突的方式,在不同的临时链表结构的情况下,本发明实施例可支持不同的检测第一待插入数据与所述至少一个待插入数据是否冲突的方式,例如临时链表以表格形式实现时,本发明实施例也可通过数据查找方式,检测第一待插入数据与所述至少一个待插入数据是否冲突。
另外,上述说明的检测第一待插入数据与所述至少一个待插入数据是否冲突的方式并不局限在图6所示场景,还可在同时检测第一待插入数据与所述至少一个待插入数据及数据集中的数据是否冲突等场景下适用。
步骤S220、确定第一待插入数据插入失败并从所述临时链表中移除所述第一待插入数据。
第一待插入数据与临时链表中还插入的其他待插入数据冲突,说明待插入数据之间冲突,则第一执行单元可取消将第一待插入数据插入数据集,确定第一待插入数据插入识别,并将第一待插入数据从临时链表中移除。
步骤S230、检测第一待插入数据与数据集中的数据是否冲突,若是,执行步骤S220,若否,执行步骤S240。
第一待插入数据与数据集中的数据冲突,说明第一待插入数据不能插入到数据集中,否则数据集将存在相冲突的数据;因此,第一执行单元可执行与步骤S220相同的步骤,确定第一待插入数据插入失败并从所述临时链表中移除所述第一待插入数据。
步骤S240、将第一待插入数据插入数据集,从所述临时链表中移除所述第一待插入数据。
第一待插入数据进一步与数据集中的数据不冲突,则第一执行单元可在数据集中插入第一待插入数据,并从临时链表中移除第一待插入数据,完成数据插入操作。
在一种应用示例中,假设执行单元为线程,数据集是一个map结构,map以键值对(key-value)形式存储数据,并要求map的值(value)全局唯一,即线程在map中插入新的键值对(键值对为待插入数据的一种可选数据形式)时,线程需要遍历map,确认map中不存在与该新的键值对的value相同的数据;
以map的索引记录公司的员工编号对应的email地址为例,要求map的值全局唯一,则显然map中不应存在相同的email地址,若此时希望在map中插入两个键值对,其中,键值对1表示员工编号L1使用的email地址,键值对2表示员工编号L2使用的email地址,若员工编号L1与L2均希望使用email地址E1,则键值对1与键值对2存在数据冲突的情况;此时,为避免数据冲突情况,现有技术是使用线程串行执行,并且索引加锁的方式实现数据插入操作,这种方式的数据插入效率无疑较低,基于此,本发明实施例改进的数据插入方案可以如下示例:
如图7所示,图7中以实线的箭头线条表示线程11的操作,以虚线的箭头线条表示线程12的操作;具体的,线程11执行键值对1的数据插入操作,线程12执行键值对2的数据插入操作,假设线程11先于线程12开始执行数据插入操作,并且线程11与线程12为并发执行状态,线程12不必等待线程12完成数据插入操作;则线程11可将员工编号L1-email地址E1的键值对1插入临时链表,然后,线程12将员工编号L2-email地址E1的键值对2插入临时链表;
从线程11的角度来看,如图7所示,线程11将键值对1插入临时链表后,线程11可检测到键值对1与临时链表已插入的其他键值对以及map中的数据不冲突,从而线程11可将员工编号L1-email地址E1的键值对1插入到map中;
从线程12的角度来看,如图7所示,线程12将键值对2插入临时链表后,线程12可检测到键值对2的值与临时链表已插入的其他键值(包含键值对1)的值相冲突,即键值对2与键值对1的值均是email地址E1,从而线程12可确键值对2存在数据冲突情况,确定键值对2插入数据失败。
进一步,线程11将键值对1插入map后,可从临时链表中移除键值对1,线程12确定键值对2存在数据冲突时,可从临时链表中移除键值对2。
需要说明的是,上述应用示例说明的数据集的结构形式,以及数据形式仅是可选的,本发明实施例并不局限数据集的结构和数据表达形式。
本发明实施例提供的数据插入方法,通过设置临时链表,可实现检测多个执行单元的待插入数据之间是否存在冲突;从而消除了现有技术依赖大粒度锁的执行单元串行执行的效率缺陷,可将执行单元的串行插入转变为执行单元的并发插入,极大地提高了计算资源的利用率,提升了数据插入效率,尤其在具有多核计算资源的场景下,本发明实施例提供的数据插入方法具有更为优异的性能表现。
上文描述了本发明实施例提供的多个实施例方案,各实施例方案介绍的各可选方式可在不冲突的情况下相互结合、交叉引用,从而延伸出多种可能的实施例方案,这些均可认为是本发明实施例披露、公开的实施例方案。
下面对本发明实施例提供的数据插入装置进行介绍,下文描述的数据插入装置可以认为是,本发明实施例为实现数据插入方法所需设置的功能模块。下文描述的功能模块可以认为是站在执行单元角度描述的功能模块,下文描述的内容可与上文描述的内容相互对应参照。
图8为本发明实施例提供的数据插入装置的一种可选框图,参照图8,该数据插入装置可以包括:
第一插入模块100,用于将第一待插入数据插入临时链表;所述临时链表除所述第一待插入数据还插入有至少一个待插入数据,插入所述临时链表的待插入数据对应的执行单元并发执行数据插入操作;
检测模块110,用于检测所述第一待插入数据与所述至少一个待插入数据及所述数据集中的数据是否冲突;
第二插入模块120,用于若所述第一待插入数据与所述至少一个待插入数据,及所述数据集中的数据不冲突,将所述第一待插入数据插入所述数据集。
可选的,检测模块110,用于检测所述第一待插入数据与所述至少一个待插入数据及所述数据集中的数据是否冲突,可以具体包括:
检测所述第一待插入数据与所述至少一个待插入数据是否冲突;
若所述第一待插入数据与所述至少一个待插入数据不冲突,检测所述第一待插入数据与所述数据集中的数据是否冲突。
可选的,图9示出了本发明实施例提供的数据插入装置的另一框图,结合图8和图9所示,该数据插入装置还可以包括:
确定失败及移除模块130,用于若所述第一待插入数据与所述至少一个待插入数据冲突,和/或,所述第一待插入数据与所述数据集中的数据冲突,确定第一待插入数据插入失败并从所述临时链表中移除所述第一待插入数据;
移除模块140,用于在第二插入模块将所述第一待插入数据插入所述数据集之后,从所述临时链表中移除所述第一待插入数据。
可选的,所述至少一个待插入数据先于所述第一待插入数据插入所述临时链表;在一种实现中,所述临时链表中的待插入数据根据插入顺序,从链表头部到链表尾部顺序排列;可选的,第一插入模块100,用于将第一待插入数据插入临时链表,可以具体包括:
将所述第一待插入数据插入所述临时链表的尾部;
检测模块110,用于检测所述第一待插入数据与所述至少一个待插入数据是否冲突,可以具体包括:
从所述第一待插入数据在所述临时链表的插入位置开始,向链表头部遍历待插入数据;
检测所述第一待插入数据与所遍历的待插入数据是否冲突。
可选的,所述至少一个待插入数据也可以是与所述第一待插入数据同时插入所述临时链表。
可选的,数据集中的数据可以通过键值对表达;相应的,检测模块110,用于检测所述第一待插入数据与所述至少一个待插入数据是否冲突,可以具体包括:
检测所述第一待插入数据的键值对,与所述至少一个待插入数据的键值对是否相同;其中,键值对相同,则所述第一待插入数据与所述至少一个待插入数据冲突,键值对不同,则所述第一待插入数据与所述至少一个待插入数据不冲突。
检测模块110,用于检测所述第一待插入数据与所述数据集中的数据是否冲突,可以具体包括:
从所述数据集的索引获取所述数据集中的数据的键值对;
检测所述第一待插入数据的键值对,与所述数据的键值对是否相同;其中,键值对相同,则所述第一待插入数据与所述数据集中的数据冲突,键值对不同,则所述第一待插入数据与所述数据集中的数据不冲突。
上述描述的数据插入装置可以应用于执行单元,例如应用于线程。
本发明实施例还提供一种执行单元(如线程),该执行单元可被配置为执行本发明实施例提供的数据插入方法;其中,所述执行单元可主要用于:
将第一待插入数据插入临时链表;所述临时链表除所述第一待插入数据还插入有至少一个待插入数据,插入所述临时链表的待插入数据对应的执行单元并发执行数据插入操作;
检测所述第一待插入数据与所述至少一个待插入数据及所述数据集中的数据是否冲突;
若所述第一待插入数据与所述至少一个待插入数据,及所述数据集中的数据不冲突,将所述第一待插入数据插入所述数据集。
所述执行单元的功能细化和扩展实现可参照前文相应部分的描述,此处不再赘述。
本发明实施例还提供一种数据插入系统,该数据插入系统的结构示例可如图2所示,包括:数据集,临时链表,并发执行的多个执行单元;
其中,临时链表用于保存所述多个执行单元的待插入数据;所述执行单元如上述所述的被配置为执行本发明实施例提供的数据插入方法的执行单元。
本发明实施例还提供一种设备,该设备可用于数据服务,可选的,该设备可以是多核设备,该设备的可选硬件框图可如图10所示,包括:多个处理器核心01,至少一个通信接口02,至少一个存储器03和至少一个通信总线04;
在本发明实施例中,多个处理器核心01、通信接口02、存储器03通过通信总线04完成相互间的通信;
其中,存储器03存储有程序,处理器核心1调用存储器03所存储的程序,以执行本发明实施例提供的数据插入方法。
本发明实施例还提供一种存储介质,该存储介质可以存储执行本发明实施例提供的数据插入方法的程序。
上述所述的程序可具体用于:
将第一待插入数据插入临时链表;所述临时链表除所述第一待插入数据还插入有至少一个待插入数据,插入所述临时链表的待插入数据对应的执行单元并发执行数据插入操作;
检测所述第一待插入数据与所述至少一个待插入数据及所述数据集中的数据是否冲突;
若所述第一待插入数据与所述至少一个待插入数据,及所述数据集中的数据不冲突,将所述第一待插入数据插入所述数据集。
所述程序的细化功能和扩展功能可参照前文相应部分的描述,此处不再赘述。
虽然本发明实施例披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。
Claims (12)
1.一种数据插入方法,其特征在于,包括:
将第一待插入数据插入临时链表;所述临时链表除所述第一待插入数据还插入有至少一个待插入数据,插入所述临时链表的待插入数据对应的执行单元并发执行数据插入操作;
检测所述第一待插入数据与所述至少一个待插入数据及数据集中的数据是否冲突;
其中,所述检测所述第一待插入数据与所述至少一个待插入数据是否冲突包括:检测所述第一待插入数据的键值对,与所述至少一个待插入数据的键值对是否相同;其中,键值对相同,则所述第一待插入数据与所述至少一个待插入数据冲突,键值对不同,则所述第一待插入数据与所述至少一个待插入数据不冲突;
以及,所述检测所述第一待插入数据与所述数据集中的数据是否冲突包括:从所述数据集的索引获取所述数据集中的数据的键值对;检测所述第一待插入数据的键值对,与所述数据的键值对是否相同;其中,键值对相同,则所述第一待插入数据与所述数据集中的数据冲突,键值对不同,则所述第一待插入数据与所述数据集中的数据不冲突;
若所述第一待插入数据与所述至少一个待插入数据,及所述数据集中的数据不冲突,将所述第一待插入数据插入所述数据集。
2.根据权利要求1所述的数据插入方法,其特征在于,所述检测所述第一待插入数据与所述至少一个待插入数据及数据集中的数据是否冲突包括:
检测所述第一待插入数据与所述至少一个待插入数据是否冲突;
若所述第一待插入数据与所述至少一个待插入数据不冲突,检测所述第一待插入数据与所述数据集中的数据是否冲突。
3.根据权利要求2所述的数据插入方法,其特征在于,还包括:
若所述第一待插入数据与所述至少一个待插入数据冲突,和/或,所述第一待插入数据与所述数据集中的数据冲突,确定第一待插入数据插入失败并从所述临时链表中移除所述第一待插入数据。
4.根据权利要求1所述的数据插入方法,其特征在于,将所述第一待插入数据插入所述数据集之后,所述方法还包括:
从所述临时链表中移除所述第一待插入数据。
5.根据权利要求1-4任一项所述的数据插入方法,其特征在于,所述至少一个待插入数据先于所述第一待插入数据插入所述临时链表。
6.根据权利要求5所述的数据插入方法,其特征在于,所述临时链表中的待插入数据根据插入顺序,从链表头部到链表尾部顺序排列;所述将第一待插入数据插入临时链表包括:
将所述第一待插入数据插入所述临时链表的尾部;
所述检测所述第一待插入数据与所述至少一个待插入数据是否冲突包括:
从所述第一待插入数据在所述临时链表的插入位置开始,向链表头部遍历待插入数据;
检测所述第一待插入数据与所遍历的待插入数据是否冲突。
7.根据权利要求1-4任一项所述的数据插入方法,其特征在于,所述至少一个待插入数据与所述第一待插入数据同时插入所述临时链表。
8.一种数据插入装置,其特征在于,包括:
第一插入模块,用于将第一待插入数据插入临时链表;所述临时链表除所述第一待插入数据还插入有至少一个待插入数据,插入所述临时链表的待插入数据对应的执行单元并发执行数据插入操作;
检测模块,用于检测所述第一待插入数据与所述至少一个待插入数据及数据集中的数据是否冲突;
其中,所述检测模块,用于检测所述第一待插入数据与所述至少一个待插入数据是否冲突包括:检测所述第一待插入数据的键值对,与所述至少一个待插入数据的键值对是否相同;其中,键值对相同,则所述第一待插入数据与所述至少一个待插入数据冲突,键值对不同,则所述第一待插入数据与所述至少一个待插入数据不冲突;
以及,检测所述第一待插入数据与所述数据集中的数据是否冲突包括:从所述数据集的索引获取所述数据集中的数据的键值对;检测所述第一待插入数据的键值对,与所述数据的键值对是否相同;其中,键值对相同,则所述第一待插入数据与所述数据集中的数据冲突,键值对不同,则所述第一待插入数据与所述数据集中的数据不冲突;
第二插入模块,用于若所述第一待插入数据与所述至少一个待插入数据,及所述数据集中的数据不冲突,将所述第一待插入数据插入所述数据集。
9.一种执行单元,其特征在于,所述执行单元被配置为执行权利要求1-7任一项所述的数据插入方法。
10.一种数据插入系统,其特征在于,包括:数据集,临时链表,及并发执行的多个如权利要求9所述的执行单元;其中,所述临时链表保存多个所述的执行单元的待插入数据。
11.一种设备,其特征在于,包括:多个处理器核心和至少一个存储器;所述存储器存储程序,所述多个处理器核心调用所述程序,执行权利要求1-7任一项所述的数据插入方法。
12.一种存储介质,其特征在于,所述存储介质存储执行权利要求1-7任一项所述的数据插入方法的程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911226694.XA CN112905609B (zh) | 2019-12-04 | 2019-12-04 | 数据插入方法、装置、执行单元、系统、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911226694.XA CN112905609B (zh) | 2019-12-04 | 2019-12-04 | 数据插入方法、装置、执行单元、系统、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112905609A CN112905609A (zh) | 2021-06-04 |
CN112905609B true CN112905609B (zh) | 2024-03-01 |
Family
ID=76104553
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911226694.XA Active CN112905609B (zh) | 2019-12-04 | 2019-12-04 | 数据插入方法、装置、执行单元、系统、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112905609B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6687798B1 (en) * | 2001-05-31 | 2004-02-03 | Oracle International Corporation | Methods for intra-partition parallelism for inserts |
CN101377775A (zh) * | 2007-08-29 | 2009-03-04 | 中兴通讯股份有限公司 | 一种内存数据库中构造冲突数据索引的方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7571299B2 (en) * | 2006-02-16 | 2009-08-04 | International Business Machines Corporation | Methods and arrangements for inserting values in hash tables |
EP2324440B1 (en) * | 2008-08-07 | 2014-10-08 | Hewlett-Packard Development Company, L.P. | Providing data structures for determining whether keys of an index are present in a storage system |
US10248693B2 (en) * | 2016-04-27 | 2019-04-02 | Sap Se | Multi-layered row mapping data structure in a database system |
-
2019
- 2019-12-04 CN CN201911226694.XA patent/CN112905609B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6687798B1 (en) * | 2001-05-31 | 2004-02-03 | Oracle International Corporation | Methods for intra-partition parallelism for inserts |
CN101377775A (zh) * | 2007-08-29 | 2009-03-04 | 中兴通讯股份有限公司 | 一种内存数据库中构造冲突数据索引的方法 |
Non-Patent Citations (2)
Title |
---|
并发非阻塞自组织链表算法;陈春光;张坤龙;谭龙飞;韩昭;;计算机工程(08);全文 * |
面向批量插入优化的并行存储引擎MTPower;陈虎;唐海浩;廖江苗;彭江峰;;计算机学报(08);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112905609A (zh) | 2021-06-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7490083B2 (en) | Parallel apply processing in data replication with preservation of transaction integrity and source ordering of dependent updates | |
US10387258B2 (en) | Method and apparatus for processing redo data in database | |
CN108572876B (zh) | 一种读写锁的实现方法及装置 | |
CN110598054B (zh) | 一种多线程链表处理方法、装置及计算机可读存储介质 | |
CN110675255B (zh) | 在区块链中并发执行交易的方法和装置 | |
US7185339B2 (en) | Victim selection for deadlock detection | |
CN107181636B (zh) | 一种负载均衡系统中的健康检查方法及装置 | |
CN110648124B (zh) | 在区块链中并发执行交易的方法和装置 | |
US20080320494A1 (en) | Data processing method, data processing apparatus, and data processing program | |
JPH0423160A (ja) | 計算機システム | |
CN107608738A (zh) | 启动对象存储设备的方法、装置及计算机可读存储介质 | |
CN112905609B (zh) | 数据插入方法、装置、执行单元、系统、设备及存储介质 | |
CN109656730B (zh) | 一种访问缓存的方法和装置 | |
US20160253275A1 (en) | Information processing device, information processing system, and exclusive control program | |
CN110706108B (zh) | 在区块链中并发执行交易的方法和装置 | |
CN115760405A (zh) | 交易执行方法、装置、计算机设备及介质 | |
CN112905322B (zh) | 资源加锁的方法、计算设备及计算机存储介质 | |
CN115809150A (zh) | 一种分布式死锁检测方法、装置及电子设备 | |
CN110909012B (zh) | 数据库对象的封锁方法、装置、设备和存储介质 | |
CN109376097B (zh) | 解决多微引擎的哈希查找学习及地址老化冲突的方法 | |
CN114296885A (zh) | 一种基于事务合并的并行执行方法及设备 | |
JP2002342403A (ja) | フォールスパス検出装置、フォールスパス検出方法およびそのプログラム | |
CN114385621A (zh) | 一种加锁方法、装置、设备及介质 | |
CN111371818A (zh) | 一种数据请求的验证方法、装置及设备 | |
CN114968642A (zh) | 定时任务执行方法、装置、服务器和可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |