CN108829747B - 数据加载方法及装置 - Google Patents
数据加载方法及装置 Download PDFInfo
- Publication number
- CN108829747B CN108829747B CN201810510384.XA CN201810510384A CN108829747B CN 108829747 B CN108829747 B CN 108829747B CN 201810510384 A CN201810510384 A CN 201810510384A CN 108829747 B CN108829747 B CN 108829747B
- Authority
- CN
- China
- Prior art keywords
- data record
- data
- cache database
- life
- major key
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开涉及一种数据加载方法及装置,以解决数据加载效率低的问题。该方法包括:扫描周期到达时,从数据源读取数据记录作为数据记录集合中的第一数据记录;遍历数据记录集合中的第一数据记录,根据第一数据记录的主键在缓存数据库中进行检索;当在缓存数据库中未检索到与主键匹配的数据记录时,将第一数据记录添加至新增数据记录集合;当在缓存数据库中检索到与主键匹配的数据记录、且第一数据记录的生命周期终止时,将第一数据记录添加至生命周期终止数据记录集合;将新增数据记录集合中的数据记录***目标数据库的全量数据表;用生命周期终止数据记录集合中的数据记录替换与其主键一致的全量数据表中的数据记录。提高了***处理效率。
Description
技术领域
本公开涉及数据处理技术领域,尤其涉及一种数据加载方法及装置。
背景技术
ETL(Extract-Transform-Load,抽取-转换-加载)用来描述将数据从来源端经过抽取、转换以及加载至目的端的过程。在一些数据ETL应用场景中,新数据记录不断生成,抽取新数据后直接将其存入数据库,不再更新历史数据记录;而在另一些应用场景中,可更新的数据记录(RecSet)有一个生命周期,即,在数据记录初始写入后的T时间后还会对数据的个别属性字段进行更新,直至此数据生命周期终止(即生命周期结束),再更新其生命终止标志。图1示出了该类数据记录的一般结构,如图1所示,该数据记录结构包括:实体标识、开始时间、结束时间(生命周期结束标志,初始为空)、更新时间以及其他一些属性标识。其中,实体标识+开始时间做主键。数据记录的生命周期包括:初始:开始时间为t1,结束时间为空,相关参数为初始值。状态1:开始时间为t1,结束时间为空,相关参数x根据业务情况更新。状态2:变化过程中的状态,相关参数x根据业务情况更新。结束:开始时间为t1,结束时间为t2,相关参数x完成更新。
以宾馆住宿记录为例,此种场景下,实体标识为住户身份证号。住户入住时生成一条记录,开始时间和更新时间均为此人的入住时间,结束时间为空;N天后,当此人退房时,此记录会更新其结束时间字段为退房时间,同时本记录的更新时间字段会同时刷新。图2示出了以宾馆住宿记录为例的数据记录的结构,在图2中,住户入住时的数据记录中实体标识为住户的身份证号411002xxxx,开始时间为住户的入住时间2018-01-01 10:00,结束时间为空,更新时间为2018-01-01 10:00;住户结束入住时的数据记录中实体标识为住户的身份证号411002xxxx,开始时间为住户的入住时间2018-01-01 10:00,结束时间为住户退房的时间2018-01-03 12:00,更新时间为住户退房的时间2018-01-03 12:00。
在对可更新数据进行ETL时,需要按照扫描周期,定时根据“更新时间”字段读取新增记录,然后对已存入目标数据库中的全量数据表按主键进行检索,但在扫描周期内读取的数据记录需在目标数据库中创建临时表进行存储(TmpTable-RecSet),这样会带来额外的磁盘IO(输入/输出),临时表和全量数据表间存在按主键的连接操作(join),当全量数据表中累计的数据记录较多时,会占用目标数据库较多的处理资源,影响***整体响应能力,降低了***响应效率。
发明内容
有鉴于此,本公开提出了一种数据加载方法及装置,用以解决相关技术中在对数据进行ETL的过程中数据加载效率较低的问题。
根据本公开的第一方面,提供了一种数据加载方法,包括:扫描周期到达时,从数据源读取数据记录至数据记录集合,作为所述数据记录集合中的第一数据记录;遍历所述数据记录集合中的所述第一数据记录,针对遍历到的任一第一数据记录,根据所述第一数据记录的主键在缓存数据库中进行检索;当在所述缓存数据库中未检索到与所述主键匹配的数据记录时,将所述第一数据记录添加至新增数据记录集合;当在所述缓存数据库中检索到与所述主键匹配的数据记录、且所述第一数据记录的生命周期终止时,将所述第一数据记录添加至生命周期终止数据记录集合;将所述新增数据记录集合中的数据记录***目标数据库的全量数据表;用所述生命周期终止数据记录集合中的数据记录替换与其主键一致的所述全量数据表中的数据记录。
根据本公开的第二方面,提供了一种数据加载装置,包括:读取模块,用于扫描周期到达时,从数据源读取数据记录至数据记录集合,作为所述数据记录集合中的第一数据记录;检索模块,用于遍历所述数据记录集合中的所述第一数据记录,针对遍历到的任一第一数据记录,根据所述第一数据记录的主键在缓存数据库中进行检索;第一添加模块,用于当在所述缓存数据库中未检索到与所述主键匹配的数据记录时,将所述第一数据记录添加至新增数据记录集合;第二添加模块,用于当在所述缓存数据库中检索到与所述主键匹配的数据记录、且所述第一数据记录的生命周期终止时,将所述第一数据记录添加至生命周期终止数据记录集合;***模块,用于将所述新增数据记录集合中的数据记录***目标数据库的全量数据表;替换模块,用于用所述生命周期终止数据记录集合中的数据记录替换与其主键一致的所述全量数据表中的数据记录。
通过本公开的各方面的数据加载方案,在对数据进行ETL的过程中,使用缓存数据库缓存数据记录,无需使用临时表暂存数据记录,降低了磁盘的IO,故在ETL的过程中无需创建临时表,从而也无需在目标数据库上进行临时表与全量数据表的连接操作,提高了***处理效率。
根据下面参考附图对示例性实施例的详细说明,本公开的其它特征及方面将变得清楚。
附图说明
包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本公开的示例性实施例、特征和方面,并且用于解释本公开的原理。
图1示出了可更新数据记录的一般结构;
图2示出了以宾馆住宿记录为例的数据记录的结构;
图3是根据一示例性实施例示出的一种数据加载方法的流程图;
图4是根据一示例性实施例示出的基于电子设备实现本公开的数据加载方法的示意图;
图5是根据一示例性实施例示出的一种数据加载方法的流程图;
图6是根据一示例性实施例示出的一种数据加载装置的框图。
具体实施方式
以下将参考附图详细说明本公开的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。
在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。
为了更好的说明本公开,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本公开同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未作详细描述,以便于凸显本公开的主旨。
图3是根据一示例性实施例示出的一种数据加载方法的流程图,该方法可以应用于服务器,如图3所示,该方法包括如下步骤:
步骤301:扫描周期到达时,从数据源读取数据记录至数据记录集合,作为数据记录集合中的第一数据记录;
从数据源读取的数据例如可以是可更新数据,可更新数据的生命周期是有期限的,例如,宾馆的住宿数据,其生命周期是n天,网吧的上网数据,其生命周期是x小时。为了定期对可更新数据进行加载,可以按照扫描周期周期性地从数据源读取数据记录至数据记录集合,其中,扫描周期可以是周期性执行步骤301至步骤306的数据加载过程的一个固定时间间隔,也可以理解为本实施例的数据加载方法的一个处理周期,即每当扫描周期到达时,则执行一次步骤301至步骤306。
步骤302:遍历数据记录集合中的所述第一数据记录,针对遍历到的任一第一数据记录,根据第一数据记录的主键在缓存数据库中进行检索;
在该步骤302中,可遍历数据记录集合中的所有第一数据记录,根据第一数据记录的主键在缓存数据库中检索与第一数据记录的主键一致的数据记录,其中,缓存数据库为用于缓存数据记录集合中生命周期未终止的数据记录,该缓存数据库中可能存有在上一个扫描周内生命周期未终止的数据记录,或者,在本数据加载方法所应用的***为新上线***的情况下,该缓存数据库中并不包括任何数据记录。
步骤303:当在缓存数据库中未检索到与所述主键匹配的数据记录时,将所述第一数据记录添加至新增数据记录集合;
例如,在缓存数据库中基于当前第一数据记录进行检索时,未检索到与该第一数据记录主键一致的数据记录时,可认为该第一数据记录为新增数据记录,则可将该第一数据记录添加至新增数据记录集合。
步骤304:当在缓存数据库中检索到与所述主键匹配的数据记录、且所述第一数据记录的生命周期终止时,将所述第一数据记录添加至生命周期终止数据记录集合;
例如,在缓存数据库中基于当前第一数据记录进行检索时,如果检索到与该第一数据记录主键一致的数据记录且该第一数据记录的生命周期终止时,将该第一数据记录添加至生命周期终止数据记录集合。
步骤305:将新增数据记录集合中的数据记录***目标数据库的全量数据表;
由于新增数据记录集合中均为本扫描周期内读取到的新增数据记录,为了实现将数据加载至目标数据库的目的,将新增数据记录结合中的新增数据记录***目标数据库的全量数据表中。其中,目标数据库为ETL过程中加载数据对应的目的端的数据库。
步骤306:用生命周期终止数据记录集合中的数据记录替换与其主键一致的所述全量数据表中的数据记录。
生命周期终止数据记录集合中的数据记录的生命周期已终止,即该类数据不再产生更新数据。故可在全量数据表中删除与该生命周期终止的数据记录主键一致的数据记录,再将该生命周期结束的数据记录***全量数据表,以实现对全量数据表中数据记录的更新。
本实施的数据加载方法,在对数据进行ETL的过程中,使用缓存数据库缓存数据记录,无需再使用临时表暂存数据记录,无需在目标数据库上进行针对全量数据表的连接操作,提高了***的处理效率。
在一个可实现方式中,本公开的数据加载方法还可包括:在首个扫描周期到达之前,将全量数据表中生命周期未终止的有效数据记录导入缓存数据库。例如,数据加载方法所应用的***为新上线***,但目标数据库***在运行中,则可以根据经验值,将一段时间内目标数据库的全量数据表中生命周期未终止的有效数据记录导入缓存数据库;再例如,目标数据库***在运行中,本申请的方法所应用的***在运行中关闭又重新启动,则根据经验值,将一段时间内目标数据库的全量数据表中生命周期未终止的有效数据记录导入缓存数据库,以覆盖缓存数据库中原来的数据记录。其中,首个扫描周期可为本数据记载方法所应用的***执行本方法的第一个周期。
在一种可实现方式中,从数据源读取数据记录至数据记录集合可包括:在扫描周期达到时,根据上一个扫描周期内设置的时间变量的取值从所述数据源读取一条或多条更新时间晚于所述取值的数据记录。其中,时间变量例如,“上一次最大更新时间”last_max_update_time,例如在上一个扫描周期内缓存数据库中更新时间最晚的数据记录的更新时间。在一个例子中,在从数据源读取数据记录集合之前,缓存数据库中包含3条数据记录,其更新时间分别为2018年4月1日14:00、2018年4月2日13:00、2018年4月2日15:00,则变量last_max_update_time在当前扫描周期的初始值为2018年4月2日15:00。扫描周期达到时,例如,为2018年5月4日00:00,即需要从数据源中读取更新时间晚于所述2018年4月2日15:00的数据记录、即在2018年4月2日15:00至2018年5月4日00:00之间产生的数据记录。
在一种可实现方式中,本公开的数据加载方法还可包括:从数据源读取一条或多条更新时间晚于时间变量取值的数据记录之后,将时间变量的取值更新为本扫描周期内从数据源读取的数据记录中的最近的更新时间。参考上述例子,假设本扫描周期内从数据源读取的数据记录中最近的更新时间为2018年5月3日17:00,则在从数据源读取数据记录之后,可将last_max_update_time更新为2018年5月3日17:00。
在一种可实现方式中,将全量数据表中生命周期未终止的有效数据记录导入缓存数据库时,可将时间变量的取值设置为所述缓存数据库中所有数据记录中的最近的更新时间。参考上述例子,假设本扫描周期内导入缓存数据库的数据记录中最近的更新时间为2018年5月3日17:00,则可将last_max_update_time更新为2018年5月3日17:00。
在一种可实现方式中,本公开的数据加载方法还可包括:当在缓存数据库中未检索到与所述主键匹配的数据记录时,将所述第一数据记录存入缓存数据库;当在缓存数据库中检索到与所述主键匹配的数据记录、且所述第一数据记录的生命周期终止时,在缓存数据库中删除所述检索到的数据记录。基于从数据源读取到的第一数据记录,将新增数记录添加至缓存数据库,删除缓存数据库中与第一数据记录主键一致的生命周期终止的数据记录,使得缓存数据库中仅缓存有生命周期未终止的数据记录,确保了缓存数据库中的数据记录不会无限膨胀。
在一种实现方式中,本公开的数据加载方法还可包括:对数据记录集合中的第一数据记录遍历完成之后,将数据记录集合删除;将新增数据记录集合中的数据记录***目标数据库的全量数据表之后,将新增数据记录集合删除;用生命周期终止数据记录集合中的数据记录替换与其主键一致的全量数据表中的数据记录之后,将生命周期终止数据记录集合删除。其中,数据记录集合、新增数据记录集合以及生命周期终止数据记录集合可在上述数据加载方法中需使用这些数据记录集合时在服务器或电子设备中创建,在使用完这些数据记录集合后,为了节省服务器或电子设备的存储空间,则可删除这些数据记录集合。
在一种可实现方式中,缓存数据库为基于key-value的内存数据库,如,redis、memcache等,此外,如果数据记录的生命周期较长,数据量较大,还可以利用hbase作为缓存数据库。由于内存数据库其基于主键的查询响应时间是毫秒级的,所以利用内存数据库作为缓存数据库,缓存数据库中的数据记录的个数不会无限膨胀,从而使得缓存数据的规模可控。
本公开提供的上述数据加载方法,可以基于一电子设备实现,图4是根据一示例性实施例示出的基于电子设备实现本公开的数据加载方法的示意图,如图4所示,数据记录集合41、新增数据记录集合42以及生命周期终止数据记录集合43在电子设备40中创建并保存在电子设备本地内存中。目标数据库44、数据源47和缓存数据库46可分别部署在该电子设备上,也可以单独部署在其他电子设备上,本公开对此不做限制。
图5是根据一示例性实施例示出的数据加载方法的流程图,如图5所示,该方法包括如下步骤:
步骤601:将目标数据库的全量数据表中生命周期未终止的有效数据记录导入缓存数据库。为了便于描述,将缓存数据库中的数据记录称为历史数据记录。
该步骤可以分为以下几种情形:
情形一、目标数据库的全量数据表中不存在数据记录。
例如,目标数据库为新上线的***,全量数据表中不存在数据,数据源中也不存在数据。此种情形下,可以不执行该步骤,相应的,缓存数据库为空。
情形二、目标数据库的全量数据表中存在数据记录。
例如,本申请的方法所应用的***为新上线***,但目标数据库***在运行中,则可以根据经验值,将一段时间内目标数据库的全量数据表中生命周期未终止的有效数据记录导入缓存数据库;再例如,目标数据库***在运行中,本申请的方法所应用的***在运行中关闭又重新启动,则根据经验值,将一段时间内目标数据库的全量数据表中生命周期未终止的有效数据记录导入缓存数据库,以覆盖缓存数据库中原来的数据记录。
本实施例中的缓存数据库以redis为例进行说明,redis对应创建一个hash(散列)结构库,定义如下:
Key(主键):
数据记录的主键(实体标识+开始时间)
Fields(属性):
Begin_time:YYYY-mm-dd hh24:mi:ss开始时间
End_time:YYYY-mm-dd hh24:mi:ss结束时间
步骤602:判断扫描周期是否到达,如果扫描周期到达,执行步骤603,如果扫描周期未到达,返回执行步骤602;
步骤603:根据变量“上次最大更新时间”last_max_update_time的取值,从数据源读取一条或多条更新时间晚于所述设置的last_max_update_time的数据记录至数据记录集合(RecSet),读取完成后,将last_max_update_time的值更新为本扫描周期内从数据源读取的数据记录中的最近的更新时间。
为了便于后续描述,将RecSet中的数据记录记为第一数据记录。
在第一个扫描周期到达时,需要根据变量last_max_update_time的初始值从数据源读取数据,则此时变量last_max_update_time初始值可以为:
针对步骤601中的情形一,缓存数据库为空,变量last_max_update_time的初始值可以为***的上线时间,相应的,当第一个扫描周期到达时,可以读取数据源从***上线到当前时间(即第一个扫描周期到达的时间)产生的所有数据记录。
针对步骤601中的情形二,缓存数据库不为空,则变量last_max_update_time的初始值可以为缓存数据库所有数据记录中的最近的更新时间,相应的,当第一个扫描周期到达时,从数据源读取更新时间晚于last_max_update_time的初始值的初始记录。
例如,缓存数据库中包含3条数据记录,其更新时间分别为2018年4月1日14:00、2018年4月2日13:00、2018年4月2日15:00,则变量last_max_update_time的初始值为2018年4月2日15:00。相应的,第一个扫描周期达到时,例如,为2018年5月4日00:00,即需要从数据源中读取更新时间晚于所述2018年4月2日15:00的数据记录、即在2018年4月2日15:00至2018年5月4日00:00之间产生的数据记录。
第一个扫描周期从数据源读取了数据记录之后,可以对变量last_max_update_time的值进行更新,更新后的last_max_update_time的值为本扫描周期读取的数据记录中的最近的更新时间。更新了last_max_update_time之后,等待下一个扫描周期,同时执行后续的步骤。
下一个扫描周期达到时,根据当前的last_max_update_time的值,即上一个扫描周期从数据源读取的数据记录中的最近的更新时间,再次从数据源读取数据记录,读取完成后,对last_max_update_time进行更新。
对于数据记录集合(RecSet)中的第一数据记录进行遍历,对于遍历到的任一第一数据记录,执行如下步骤604-607。
步骤604:按第一数据记录的主键在redis中进行检索。
步骤605:若在redis中未检索到与第一数据记录的主键匹配的数据记录,则该第一数据记录为新增数据记录,将该新增数据记录添加至新增数据记录集合(RecSet-New),并在redis中***该新增数据记录;
需要说明的是,在第一次扫描周期到达时,若redis中不存在数据记录,则经过该步骤的检索,RecSet中数据记录全部为新增的数据记录,全部添加至RecSet-New和redis中。
步骤606:若在redis中检索到与第一数据记录的主键匹配的数据记录,且该第一数据记录对应的end_time字段不为空,则确定该第一数据记录的生命周期终止,则将该生命周期终止的数据记录添加至生命周期终止数据记录集合(RecSet-Over),并在redis中删除检索到的与第一数据记录的主键匹配的数据记录。
步骤607:若在redis中检索到与第一数据记录的主键匹配的数据记录,且该第一数据记录对应的end_time字段为空,则表示redis中与所述主键匹配的数据记录生命周期未终止,不做处理。
步骤608,对RecSet中的第一数据记录遍历完成后,将RecSet删除,返回步骤602,并执行步骤609和610。
可以同时执行609和610,也可以先执行两个步骤中的任意一个。在执行步骤609和610时,可以同时执行步骤602扫描周期的检测。
步骤609:将所述RecSet-New中包含的所有新增数据记录***目标数据库中的全量数据表Table-Data,然后删除RecSet-New。
步骤610:用RecSet-Over中的数据记录替换与其主键一致的Table-Data中的数据记录,然后删除RecSet-Over。
综上所述,本公开在对数据进行ETL的过程中,使用缓存数据库对目标数据库中可更新的数据(即生命周期未结束的数据记录)进行缓存,将本扫描周期获取的数据存储在本地内存中,利用本地内存和一个专门的内存数据库可以实现快速高效的数据检索和处理,仅在处理完成后,将更新的部分数据同步到目标数据库中,大大减少了磁盘IO操作,同时也规避了现有技术中在目标数据库中针对全量数据表的连接操作,提高了处理效率。
图6是根据一示例性实施例示出的数据加载装置的框图,如图6所示,该装置70包括:
读取模块71,用于扫描周期到达时,从数据源读取数据记录至数据记录集合,作为所述数据记录集合中的第一数据记录;
检索模块72,用于遍历所述数据记录集合中的所述第一数据记录,针对遍历到的任一第一数据记录,根据所述第一数据记录的主键在缓存数据库中进行检索;
第一添加模块73,用于当在所述缓存数据库中未检索到与所述主键匹配的数据记录时,将所述第一数据记录添加至新增数据记录集合;
第二添加模块74,用于当在所述缓存数据库中检索到与所述主键匹配的数据记录、且所述第一数据记录的生命周期终止时,将所述第一数据记录添加至生命周期终止数据记录集合;
***模块75,用于将所述新增数据记录集合中的数据记录***目标数据库的全量数据表;
替换模块76,用于用所述生命周期终止数据记录集合中的数据记录替换与其主键一致的所述全量数据表中的数据记录。
在一种可实现方式中,本公开的数据加载装置还可包括:导入模块,用于在首个扫描周期到达之前,将所述全量数据表中生命周期未终止的有效数据记录导入所述缓存数据库。
在一种可实现方式中,所述读取模块用于:在扫描周期达到时,根据上一个扫描周期内设置的时间变量的取值从所述数据源读取一条或多条更新时间晚于所述取值的数据记录。
在一种可实现方式中,本公开的数据加载装置还包括:更新模块,用于在从数据源读取一条或多条更新时间晚于所述取值的数据记录之后,将所述时间变量的取值更新为本扫描周期内从数据源读取的数据记录中的最近的更新时间。
在一种可实现方式中,本公开的数据加载装置还包括:设置模块,用于在将所述全量数据表中生命周期未终止的有效数据记录导入所述缓存数据库时,将所述时间变量的取值设置为所述缓存数据库中所有数据记录中的最近的更新时间。
在一种可实现方式中,本公开的数据加载装置还包括:存储模块,用于当在所述缓存数据库中未检索到与所述主键匹配的数据记录时,将所述第一数据记录存入所述缓存数据库;第一删除模块,用于当在所述缓存数据库中检索到与所述主键匹配的数据记录、且所述第一数据记录的生命周期终止时,在所述缓存数据库中删除所述检索到的数据记录。
在一种可实现方式中,本公开的数据加载装置还包括:所述装置还包括:
第二删除模块,用于对所述数据记录集合中的所述第一数据记录遍历完成之后,将所述数据记录集合删除;第三删除模块,用于将所述新增数据记录集合中的数据记录***目标数据库的全量数据表之后,将所述新增数据记录集合删除;第四删除模块,用于用所述生命周期终止数据记录集合中的数据记录替换与其主键一致的所述全量数据表中的数据记录之后,将所述生命周期终止数据记录集合删除。
以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
Claims (12)
1.一种数据加载方法,其特征在于,应用于对数据进行抽取-转换-加载ETL,所述方法包括:
扫描周期到达时,从数据源读取数据记录至数据记录集合,作为所述数据记录集合中的第一数据记录;
遍历所述数据记录集合中的所述第一数据记录,针对遍历到的任一第一数据记录,根据所述第一数据记录的主键在缓存数据库中进行检索;其中,所述缓存数据库中包括生命周期未终止的有效数据记录;
当在所述缓存数据库中未检索到与所述主键匹配的数据记录时,将所述第一数据记录添加至新增数据记录集合,并将所述新增数据记录集合中的数据记录***目标数据库的全量数据表;以及,将所述第一数据记录存入所述缓存数据库;
当在所述缓存数据库中检索到与所述主键匹配的数据记录、且所述第一数据记录的生命周期终止时,将所述第一数据记录添加至生命周期终止数据记录集合,并用所述生命周期终止数据记录集合中的数据记录替换与其主键一致的所述全量数据表中的数据记录;以及,在所述缓存数据库中删除检索到的数据记录。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在首个扫描周期到达之前,将所述全量数据表中生命周期未终止的有效数据记录导入所述缓存数据库。
3.根据权利要求2所述的方法,其特征在于,所述从数据源读取数据记录至数据记录集合,包括:
在扫描周期达到时,根据上一个扫描周期内设置的时间变量的取值从所述数据源读取一条或多条更新时间晚于所述取值的数据记录。
4.根据权利要求3所述的方法,其特征在于,所述从所述数据源读取一条或多条更新时间晚于所述取值的数据记录之后,该方法还包括:
将所述时间变量的取值更新为本扫描周期内从数据源读取的数据记录中的最近的更新时间。
5.根据权利要求3所述的方法,其特征在于,所述将所述全量数据表中生命周期未终止的有效数据记录导入所述缓存数据库时,
将所述时间变量的取值设置为所述缓存数据库中所有数据记录中的最近的更新时间。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
对所述数据记录集合中的所述第一数据记录遍历完成之后,将所述数据记录集合删除;
将所述新增数据记录集合中的数据记录***目标数据库的全量数据表之后,将所述新增数据记录集合删除;
用所述生命周期终止数据记录集合中的数据记录替换与其主键一致的所述全量数据表中的数据记录之后,将所述生命周期终止数据记录集合删除。
7.一种数据加载装置,其特征在于,应用于对数据进行抽取-转换-加载ETL,包括:
读取模块,用于扫描周期到达时,从数据源读取数据记录至数据记录集合,作为所述数据记录集合中的第一数据记录;
检索模块,用于遍历所述数据记录集合中的所述第一数据记录,针对遍历到的任一第一数据记录,根据所述第一数据记录的主键在缓存数据库中进行检索;其中,所述缓存数据库中包括生命周期未结束的数据记录;
第一添加模块,用于当在所述缓存数据库中未检索到与所述主键匹配的数据记录时,将所述第一数据记录添加至新增数据记录集合;
第二添加模块,用于当在所述缓存数据库中检索到与所述主键匹配的数据记录、且所述第一数据记录的生命周期终止时,将所述第一数据记录添加至生命周期终止数据记录集合;
***模块,用于将所述新增数据记录集合中的数据记录***目标数据库的全量数据表;
替换模块,用于用所述生命周期终止数据记录集合中的数据记录替换与其主键一致的所述全量数据表中的数据记录;
存储模块,用于当在所述缓存数据库中未检索到与所述主键匹配的数据记录时,将所述第一数据记录存入所述缓存数据库;
第一删除模块,用于当在所述缓存数据库中检索到与所述主键匹配的数据记录、且所述第一数据记录的生命周期终止时,在所述缓存数据库中删除检索到的数据记录。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括:
导入模块,用于在首个扫描周期到达之前,将所述全量数据表中生命周期未终止的有效数据记录导入所述缓存数据库。
9.根据权利要求8所述的装置,其特征在于,所述读取模块用于:在扫描周期达到时,根据上一个扫描周期内设置的时间变量的取值从所述数据源读取一条或多条更新时间晚于所述取值的数据记录。
10.根据权利要求9所述的装置,其特征在于,所述装置还包括:
更新模块,用于在从数据源读取一条或多条更新时间晚于所述取值的数据记录之后,将所述时间变量的取值更新为本扫描周期内从数据源读取的数据记录中的最近的更新时间。
11.根据权利要求9所述的装置,其特征在于,所述装置还包括:
设置模块,用于在将所述全量数据表中生命周期未终止的有效数据记录导入所述缓存数据库时,将所述时间变量的取值设置为所述缓存数据库中所有数据记录中的最近的更新时间。
12.根据权利要求7所述的装置,其特征在于,所述装置还包括:
第二删除模块,用于对所述数据记录集合中的所述第一数据记录遍历完成之后,将所述数据记录集合删除;
第三删除模块,用于将所述新增数据记录集合中的数据记录***目标数据库的全量数据表之后,将所述新增数据记录集合删除;
第四删除模块,用于用所述生命周期终止数据记录集合中的数据记录替换与其主键一致的所述全量数据表中的数据记录之后,将所述生命周期终止数据记录集合删除。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810510384.XA CN108829747B (zh) | 2018-05-24 | 2018-05-24 | 数据加载方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810510384.XA CN108829747B (zh) | 2018-05-24 | 2018-05-24 | 数据加载方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108829747A CN108829747A (zh) | 2018-11-16 |
CN108829747B true CN108829747B (zh) | 2019-09-17 |
Family
ID=64145497
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810510384.XA Active CN108829747B (zh) | 2018-05-24 | 2018-05-24 | 数据加载方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108829747B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109635032B (zh) * | 2018-12-24 | 2023-07-28 | 福建凯米网络科技有限公司 | 一种数据转换的方法及终端 |
CN112256775A (zh) * | 2020-09-27 | 2021-01-22 | 建信金融科技有限责任公司 | 一种Oracle数据库的数据定时加载的方法及装置 |
CN113139081B (zh) * | 2021-04-27 | 2023-10-27 | 中山亿联智能科技有限公司 | 高效率低延迟上报读取用户在线播放信息的方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102663114A (zh) * | 2012-04-17 | 2012-09-12 | 中国人民大学 | 面向并发olap的数据库查询处理方法 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101504664B (zh) * | 2009-03-18 | 2010-12-01 | 中国工商银行股份有限公司 | 对全量源数据进行抽取转换加载的装置及方法 |
CN104731791A (zh) * | 2013-12-18 | 2015-06-24 | 东阳艾维德广告传媒有限公司 | 一种市场销售分析数据集市*** |
CN104462194A (zh) * | 2014-10-28 | 2015-03-25 | 北京国双科技有限公司 | 一种业务数据的处理方法、装置及服务器 |
CN104484400B (zh) * | 2014-12-12 | 2018-02-23 | 北京国双科技有限公司 | 数据查询处理方法及装置 |
CN105426292B (zh) * | 2015-10-29 | 2018-03-16 | 网易(杭州)网络有限公司 | 一种游戏日志实时处理***及方法 |
CN105512201A (zh) * | 2015-11-26 | 2016-04-20 | 晶赞广告(上海)有限公司 | 数据收集和加工方法及装置 |
CN105956123A (zh) * | 2016-05-03 | 2016-09-21 | 无锡雅座在线科技发展有限公司 | 基于局部更新软件的数据处理方法及装置 |
CN106407321B (zh) * | 2016-08-31 | 2019-12-06 | 东软集团股份有限公司 | 同步数据的方法及装置 |
CN107229721B (zh) * | 2017-06-02 | 2019-10-29 | 泰华智慧产业集团股份有限公司 | 一种变更数据抽取的方法及装置 |
CN107330003A (zh) * | 2017-06-12 | 2017-11-07 | 上海藤榕网络科技有限公司 | 数据同步方法、***、存储器及数据同步设备 |
-
2018
- 2018-05-24 CN CN201810510384.XA patent/CN108829747B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102663114A (zh) * | 2012-04-17 | 2012-09-12 | 中国人民大学 | 面向并发olap的数据库查询处理方法 |
Non-Patent Citations (1)
Title |
---|
ARKTOS: TOWARDS THE MODELING, DESIGN, CONTROL AND EXECUTION OF ETL PROCESSES;PANOS VASSILIADIS 等;《Information Systems》;20011231;第26卷(第8期);第537-561页 |
Also Published As
Publication number | Publication date |
---|---|
CN108829747A (zh) | 2018-11-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108829747B (zh) | 数据加载方法及装置 | |
CN107229721B (zh) | 一种变更数据抽取的方法及装置 | |
CN104133822B (zh) | 一种对存储器上的文件进行扫描的方法及装置 | |
CN110268394A (zh) | Kvs树 | |
CN110383261A (zh) | 用于多流存储装置的流选择 | |
CN110268399A (zh) | 用于维护操作的合并树修改 | |
CN110291518A (zh) | 合并树无用单元指标 | |
CN107943718B (zh) | 一种清理缓存文件的方法和装置 | |
US7536512B2 (en) | Method and apparatus for space efficient identification of candidate objects for eviction from a large cache | |
WO2010062554A2 (en) | Index compression in databases | |
CN103970870A (zh) | 数据库查询方法和服务器 | |
CN106155934B (zh) | 一种云环境下基于重复数据的缓存方法 | |
CN104423982B (zh) | 请求的处理方法和处理设备 | |
CN101673192A (zh) | 时序化的数据处理方法、装置及*** | |
CN110287201A (zh) | 数据访问方法、装置、设备及存储介质 | |
US20130046798A1 (en) | Method and apparatus for visualization of infrastructure using a non-relational graph data store | |
CN104092670A (zh) | 网络缓存服务器处理文件的方法及处理缓存文件的设备 | |
US10789234B2 (en) | Method and apparatus for storing data | |
Zhang et al. | Recovering SQLite data from fragmented flash pages | |
CN107169047A (zh) | 一种实现数据缓存的方法及装置 | |
CN104219271B (zh) | 基于多线程异步下载页面的多服务器同步方法 | |
CN109558270A (zh) | 数据备份的方法和装置、数据还原的方法和装置 | |
CN110399451B (zh) | 一种基于非易失性内存的全文检索引擎缓存方法,***,设备及可读存储介质 | |
CN105653367A (zh) | 遍历计时器的方法及装置 | |
CN110750566A (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 |