【发明内容】
针对现有技术的以上缺陷或改进需求,本发明解决了文档型数据库向关系数据库中进行数据抽取时各文档域集不一致导致的无法批量抽取,以及文档内域名重复等因素造成的数据抽取错误。
本发明实施例采用如下技术方案:
第一方面,本发明提供了一种文档型数据库中数据抽取到关系数据库的方法,包括:在文档型数据库中创建视图,视图包括所有需进行数据转换的文档;获取视图中所有文档,并获取每一个文档的文档ID,每一个文档的文档ID为全局唯一ID;获取视图中每一文档中域名的集合,并将各文档中域名的集合取并集;在关系数据库中创建视图对应的表,以并集中的每一个域名为字段名,向表中插入字段;获取每个文档中每个域中待抽取的数据,将第一数据转换为相应域名的字段的预设数据类型的数据;根据文档的文档ID和域名,将转换后的数据插入表的相应位置。
优选的,将转换后的数据插入表的相应位置,具体为:以文档ID为主键向表中插入行,其中每一行存放一个文档的所有数据;将文档中每个域的转换后的数据插入文档所在行相应域名的字段。
优选的,将转换后的数据插入视图对应表的相应位置,还包括:若同一文档中存在多个相同域名的域,将每个域中的数据单独进行数据转换,转换后的第二数据用预设连接符连接成为第三数据,将第三数据插入文档所在行相应域名的字段。
优选的,将每个需进行数据转换的文档中每个域的第一数据分别转换为对应域的预设数据类型的第二数据,具体为:判断第一数据是否为富文本,若是,预设数据类型为CLOB类型;若否,判断第一数据长度是否大于预设数据长度,若是,预设数据类型为CLOB类型,若否,预设数据类型为VARCHAR类型;将第一数据转换为预设数据类型的第二数据。
优选的,步骤判断第一数据是否为富文本之前,还包括:将前一次转换使用的预设数据类型保存为历史数据类型;判断历史数据类型是否为CLOB类型,若是,不判断本次转换数据类型,使用历史数据类型作为本次转换的预设数据类型。
优选的,还包括:获取每一需进行数据转换的文档的每一域的第一数据;获取表中与需进行数据转换的文档对应的行中每一字段的第二数据;判断域名对应字段的第二数据是否与第一数据相同,若是,表明数据转换正确,完成转换;若否,表明数据转换不正确,重新获取对应字段的第二数据。
优选的,还包括:在文档型数据库的附件库中创建完全视图;遍历完全视图中所有文档,判断每一文档是否包含附件域,若是,获取源附件文件,将源附件文件提取到本地文件系统中生成目标附件文件;表中设置附件路径字段,将目标附件文件在本地文件系统中的绝对路径插入相应文档的附件路径字段。
优选的,还包括:生产源附件文件的第一SHA校验值,和目标附件文件的第二SHA校验值;判断第一SHA校验值和第二SHA校验值是否一致,若否,删除现有目标附件文件,再次获取源附件文件,将源附件文件提取到本地文件系统生成第二目标附件文件。
优选的,还包括:视图中每一文档数据抽取完成后,将当前文档的文档ID标记为已抽取文档ID;若产生错误导致数据抽取中断,中断恢复时判断待抽取文档的文档ID是否为已抽取文档ID,若是,跳过当前文档,若否,对文档进行数据抽取。
另一方面,本发明提供了一种文档型数据库中数据抽取系统,包含至少一个服务器和至少一个客户端:服务器可部署关系数据库,客户端可部署文档型数据库,服务器和客户端间可进行数据库数据和文件交换;服务器包括至少一个第一处理器和第一存储器,至少一个第一处理器和第一存储器之间通过数据总线连接,第一存储器存储有可被至少一个第一处理器执行的指令,指令在被第一处理器执行后,用于完成权利要求1-9任一的文档型数据库中数据抽取到关系数据库的方法;客户端包括至少一个第二处理器和第二存储器,至少一个第二处理器和第二存储器之间通过数据总线连接,第二存储器存储有可被至少一个第二处理器执行的指令,指令在被第二处理器执行后,用于完成权利要求1-9任一的文档型数据库中数据抽取到关系数据库的方法。
与现有技术相比,本发明实施例的有益效果在于:本发明通过对文档型数据库中需进行数据转换的文档中域集的整合,不同文档域集不一致、同一文档中域名重复等问题,实现了多个文档数据批量抽取至同一个表中,同时保证了所抽取数据的准确性及数据组织结构的完整性。
进一步,在本发明的优选方案中,本发明提供了文档型数据库中数据抽取时数据类型转换和附件文件提取的方法,解决了数据抽取时相同域名的数据类型不一致和文档所包含的附件文件提取的问题。同时,通过数据准确性验证及文件完整性验证保证了数据抽取时的数据准确度,通过增量抽取方法保证了抽取中断恢复时的提取准确性和效率。
【具体实施方式】
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例涉及文档型数据库和关系数据库,文档型数据库以文档结构为基础存放数据,关系数据库以表结构为基础存放数据。
本实施例中使用的文档型数据库及关系数据库可使用目前通用的各种类型数据库,如Lotus Domino/Notes、Oracle等。
两种数据库结构对应关系如下表:
本发明各实施方式的服务器或客户端的硬件部分可以多种形式存在,包括但不限于可部属数据库并进行数据库读写的下列设备:
(1)服务器:提供计算服务的设备,服务器的构成包括处理器、硬盘、内存、系统总线等,服务器和通用的计算机架构类似,但是由于需要提供高可靠的服务,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。
(2)个人计算机及超移动个人计算机设备:这类设备属于个人计算机的范畴,有计算和处理功能。这类终端包括:普通个人PC、PDA、MID和UMPC设备等,例如iPad。
(3)移动通信设备:这类设备的特点是具备移动通信功能,并且以提供话音、数据通信为主要目标。这类终端包括:智能手机(例如iPhone)、多媒体手机等。
此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。下面就参考附图和实施例结合来详细说明本发明。
实施例1:
对于大量数据管理,通常会使用数据库进行管理,目前常用的数据库有文档型数据库和关系数据库。文档型数据库基于共享文档思想建立,可简便的通过文件系统对数据进行访问,但无法方便的使用SQL语言对数据进行操作。因此,在一些应用场景下,如系统主数据库是关系数据库但辅助系统数据库是文档型数据库时,需要将辅助系统的文档型数据库中的数据抽取至作为主数据库的关系数据库中进行整合使用。
在文档型数据库中,存储的基本单元为文档,文档中不同属性的数据存放于不同域中。在关系数据库中,存储的基本单元为表,表中不同属性的数据存放于不同字段中。为了对某一类文档中的数据批量抽取及管理,需要将文档型数据库中多个不同文档中相同域的数据放入同一张表的相同字段中。
但不同文档中所包含的域不一定完全相同,不同文档同名域中的数据类型不一定相同。因此,如何将不同文档中的域集合整合为同一张表中的字段集合,避免因不同文档中的域集,或不同文档中同名域的数据类型不同造成的数据抽取错误或遗漏是本实施例需解决的问题。
本实施例提供了一种文档型数据库中数据抽取到关系数据库的方法,如图1所示,步骤如下:
步骤101:在文档型数据库中创建视图,视图包括所有需进行数据转换的文档。
文档型数据库中文档的基本组织形式如图2所示,。文档型数据库中的文档可以通过视图来显示,视图是满足某种规则的文档的集合,在本实施例中,将需数据转换的文档放入同一视图中进行管理,以便后续操作。
步骤102:获取视图中所有文档,并获取每一个文档的文档ID,每一个文档的文档ID为全局唯一ID。
每一个文档的文档ID是进行数据抽取时每个文档的唯一标识,文档型数据库中,每一个文档的属性值都包括有文档ID,该文档ID值由文档型数据库进行管理,为全局唯一ID。在进行数据抽取时,可以将文档的文档ID作为区别不同文档的特征值。将数据抽取放入关系数据库的表中后,文档ID也作为关系数据库中每个文档对应行的键值使用。
步骤103:获取视图中每一文档中域名的集合,并将各文档中域名的集合取并集。
文档型数据库的每个文档中都包含多个域,且每个文档所包含的域类型数量不一定相同。有些域在不同文档中的域名和数据属性都相同,如系统内置域,还有一些文档中包含仅自己使用的特殊域。在某一具体应用场景中,视图中各文档的域名和各域的数据类型如图2所示,其中域数据类型“—”表示非富文本类型,域名为明确指出为“fjmssid”的都不为“fjmssid”。数据抽取时要这些域作为一张表的字段放入同一表中,就需要汇总所有文档中使用的域,并将相同域名和属性的域合并避免重复。获取视图中每一文档中的域名,并将域名取并集后,并集中既包含全部域名,又剔除了重复的域名,因此可以将其作为所有文档的共有域名集进行使用,保证数据抽取时每一域名都有对应的字段可用于数据插入。
步骤104:在关系数据库中创建视图对应的表,以并集中的每一个域名为字段名,向表中插入字段。
文档型数据库的数据基本存储单元为文档,文档内不同性质的数据存储在不同域中,而关系数据库中基本存储单元为表,表内不同性质的数据存储在不同字段中。进行数据抽取时,需要将使用域组织的不同属性数据插入表中的对应字段中,因此需要将步骤103中获得的所有文档中域的并集作为表的字段建立表,表的字段数与并集中域名数相同,表中每一字段的字段名为并集中的一个域名,字段中数据就是对应域的数据。
步骤105:获取每个文档中每个域的第一数据,将第一数据转换为相应域名的字段的第二数据。
关系数据库中常见的数据类型一般有整数型、字符串型、长字符串型等静态数据类型,通常仅使用VARCHAR和CLOB两种类型。文档型数据库中常见的数据类型除了一般有文本数据类型、图片视频等静态富文本数据类型,可能还包括按钮、html语句等非静态数据类型。因此,在进行数据抽取时,需要进行数据转换,将文档型数据库中不同类型的第一数据转换为关系数据库可接受的统一数据类型的第二数据。
步骤106:根据文档的文档ID和域名,将第二数据插入表的相应位置。
文档型数据库中的数据抽取至关系数据库中时,每一文档对应表中的一行,以文档ID为键值,避免冲突。具体的,由于文档中所有域已进行整合,成为表中的一个字段,只需将每一文档内已转换数据类型的各域中的数据分别插入该行相应字段。
通过上述步骤,可将文档型数据库中的多个独立且域集不同的文档方便的存放入关系数据库中的一个文档/域二维表中,实现了文档型数据库中文档的批量抽取和数据同一管理。
本实施例中的提供的数据抽取方法,在进行数据抽取前,对待抽取的文档中域进行整合,取得域并集,以域的并集作为关系数据库表中的字段集,可以方便的使用SQL语句将文档型数据库中的数据批量提取至关系数据库中,避免目前数据提取方式对于多个域集不相同的文档无法批量提取、数据整合不方便的问题。
在本实施例的某些应用场景中,以文档的文档ID对文档进行区分,除了可避免同名文档冲突、文档数据抽取遗漏等错误发生,还可在进行数据抽取时作为判断文档是否已抽取的判断依据,在数据抽取中断回复后判断是否文档已抽取,以便进行断点续传,提高数据抽取的效率。
在本实施例的某些应用场景中,对数据准确性要求较高,需进行数据验证,可根据文档ID获取与表中每一行记录对应的文档,判断每一字段的数据与相应域的数据是否相同,避免因数据插入错误造成的数据抽取错误。
在本实施例的某些应用场景中,当进行域名整合时,若某文档中存在名为“$FILE”的域,说明该文档中存在附件,需进一步进行附件提取操作,对文档中的域进行整合分析避免了数据提取时遗漏附件,保证了文件的完整性。
实施例2:
在进行文档型数据库数据抽取的过程中,在实施例1的数据抽取方法基础上,还需针对不同情况对个各步骤进行调整。
在某些具体应用场景中,同一个文档中存在多个同名域,这些同名域中存放的数据不相同,但由于域名相同,进行数据抽取时都需放入同一字段中,因此需要进行连接,确保所有数据都被抽取入关系数据库的表中,如图4所示,抽取连接步骤如下:
步骤201:抽取同名域中的数据。
步骤202:进行数据类型转换。
步骤203:使用预设连接符连接转换后的数据。
步骤204:将连接后的数据插入相应行的相应字段中。
具体的,预设连接符可为数据库可保存的无特殊含义的字符,如连字符、分隔符等。还可以在连接时为每个数据添加标识符,如数字标识,便于数据使用时进行查找解析。
文档型数据库中数据类型丰富,某些数据类型如按钮、公式等数据类型不被关系数据库支持,在进行数据抽取时需转换为关系数据库可支持的数据类型,需进行数据转换。
为了将不同类型和长度的数据放入表中同一字段内,并能容纳非纯文本类型的数据,在本实施例中采用VARCHAR和CLOB两种数据类型。具体的,域中数据长度小于预设数据长度时,使用存储空间占用较小的VARCHAR类型;域中数据长度大于预设数据长度或非纯文本类型时,使用存储容量更大内容更灵活的CLOB类型。预设数据长度可设为VARCHAR类型的最大长度值65535字节。
进一步的,由于不同文档中同名域的数据类型和数据长度不同,在某些具体应用场景中。若之前文档中进行数据抽取的某一域转换后的第二数据类型为VARCHAR类型,则该字段的数据类型为VARCHAR类型,当前文档中同一域的第一数据为富文本类型需转换为CLOB类型第二数据,无法存入VARCHAR类型字段中,则需要将整个字段的数据类型变化为CLOB类型,之前文档中已转换的VARCHAR类型第二数据也需再次转换为CLOB类型第二数据,以保证数据类型统一。若之前文档中进行数据抽取的某一域转换后的第二数据类型为CLOB类型,而CLOB数据类型第二数据无法使用VARCHAR类型数据存储,当前文档中同一域的第一数据即使可转换为VARCHAR类型第二数据,也需使用CLOB类型保证数据类型同一。因此,进行数据类型转换的具体步骤如图5所示:
步骤301:将前一次转换使用的预设数据类型保存为历史数据类型。
步骤302:判断历史数据类型是否为CLOB类型。若是,转步骤303;若否,转步骤304。
步骤303:使用历史数据类型作为本次转换的预设数据类型。
步骤304:判断本次转换数据类型是否为CLOB类型。若否,转步骤305;若是,转步骤306。
步骤305:历史数据类型和本次转换数据类型都为VARCHAR类型,使用VARCHAR数据类型作为本次转换数据类型。
步306骤:使用CLOB类型作为本次转换数据类型,将该字段已转换的第二数据都再次转换为CLOB类型。
使用上述数据类型转换方法,可以方便快速的将不同文档的同一域中不同类型的第一数据转换为相应字段中数据类型统一的第二数据。
本实施例的另一些实际应用场景中,文档型数据库的文档中还包含附件,数据提取时除了提取文档中的数据,还需提取文档相应的附件。在文档型数据库中,附件由独立的附件库进行存储和管理,在文档中使用"$FILE"域存储附件的路径等属性。如图6所示,进行附件提取的具体步骤如下:
步骤401:在文档型数据库的附件库中创建完全视图。
步骤402:遍历完全视图中所有文档,判断每一文档是否包含附件域。若是,转步骤403。
步骤403:获取源附件文件,将源附件文件提取到本地文件系统中生成目标附件文件。
步骤404:若进行步骤403,表中设置附件路径字段,将目标附件文件在本地文件系统中的绝对路径插入相应文档的附件路径字段。
步骤403中,由于附件库完全视图中可包含多个附件库,因此进行附件提取时,需对不同附件库中存储的附件路径进行区别,可以再本地建立以附件库为文件夹名称的文件夹对不同附件库内的附件进行分类存储。具体的,附件路径字段为:基础路径\附件库名称\文档ID。
通过上述步骤,可完整准确的将Domino文档中的附件提取至关系数据库的本地系统中,并通过附件路径字段建立索引,保证数据抽取的完整和调用的便捷。
在本实施例的某些具体应用场景中,对于数据准确性要求较高,在进行数据抽取时,需对已抽取数据和附件的准确性进行验证。
对于数据准确性的验证,可将每个文档的每个域中的第一数据,与进行数据类型转换后相应行相应字段中的第二数据进行对比,若数据内容相同则数据抽取正确,若数据内容不同删除已转换的第二数据,重新获取第一数据进行数据转换。如图7所示,具体校验步骤如下:
步骤501:获取文档中某一域的第一数据。
步骤502:获取表中相应文档相应字段的第二数据。
步骤503:判断第一数据和第二数据是否相同。若是,转步骤504;若否,转步骤505。
步骤504:获取文档中下一个域继续验证。
步骤505:使用第一数据重新进行数据转换,再次获得第二数据。
在步骤505中,对于某些数据准确性要求较高,或需对不同类型错误进行不同处理的应用场景,也可不重新进行数据转换,而采用程序中断报错的处理方式,或其它常用异常处理方式。
对于附件准确性的验证,可使用一般的文件完整性验证方式,如SHA校验、MD5校验等。具体的,在本实施例中,使用安全性较高的SHA校验,可根据实际需求选用SHA1或SHA256校验方法。比较文档型数据库中存放的源附件文件与抽取至关系数据库本地系统中的目标附件文件的SHA校验值,若两附件文件SHA校验值一致,表示两文件一致,抽取正确,若两附件文件校验值不一致,表示两文件不一致,可能存在抽取错误,删除已抽取至本地的目标附件文件,重新将源文件抽取至本地文件系统中生成第二目标附件文件,替换抽取错误的目标附件文件。
上述数据及附件准确性验证方法,在抽取后验证数据和附件文件与原始数据和附件文件的一致性,在出现抽取错误后删除错误数据和附件文件重新进行抽取,保证了数据抽取时的准确性,防止出现数据抽取错误。
在本实施例的某些实际应用场景中,由于文档型数据库存储的数据量较大,因此在进行数据抽取时需具有断点续传的功能。在本实施例中,可在每一文档中的数据抽取完成后,将当前文档的文档ID标记为已抽取文档ID,在出现错误中断并恢复后,跳过已抽取的文档,仅对未进行过数据抽取的文件进行数据抽取,以避免对已进行过数据抽取的文档重复抽取,造成数据重复和时间浪费。
本实施例提供的文档型数据库中数据抽取到关系数据库的方法可保证操作简便、抽取效率高的基础上保证数据抽取时类型一致性,以及所抽取数据的准确性。
实施例3:
在上述实施例1和实施例2提供的文档型数据库中数据抽取到关系数据库的方法的基础上,本发明还提供了一种可用于实现上述方法的文档型数据库中数据抽取系统,如图8所示,是本发明实施例的系统架构示意图。
如图8A所示,本实施例的文档型数据库中数据抽取系统包含至少一个服务器1和至少一个客户端2,服务器1中可部署关系数据库,客户端2中可部署文档型数据库,服务器1和客户端2间可进行数据库数据和文件交换。客户端2中部署的文档型数据库内数据通过数据交换,传输至服务器1中部署的关系数据库中存储;客户端2中部署的文档型数据库内附件,通过文件交换,传输至服务器1的本地文件系统,供关系数据库通过保存的文件路径调用。
服务器1包括一个或多个处理器21以及存储器22,图8B中以一个处理器21为例,处理器21和存储器22可以通过总线或者其他方式连接,图8B中以通过总线连接为例。
客户端2包括一个或多个处理器23以及存储器24,图8C中以一个处理器23为例,处理器23和存储器24可以通过总线或者其他方式连接,图8C中以通过总线连接为例。
存储器22和24作为一种文档型数据库中数据抽取到关系数据库的方法非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如实施例1中的文档型数据库中数据抽取到关系数据库的方法。处理器21通过运行存储在存储器22中的非易失性软件程序、指令以及模块,从而执行文档型数据库中数据抽取系统的各种功能应用以及数据处理,即实现实施例1和实施例2的文档型数据库中数据抽取到关系数据库的方法。
存储器22和24可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器22可选包括相对于处理器21远程设置的存储器,这些远程存储器可以通过网络连接至处理器21。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
程序指令/模块存储在存储器22或24中,当被一个或者多个处理器21或23执行时,执行上述实施例1中的文档型数据库中数据抽取到关系数据库的方法,例如,执行以上描述的图1、图4-图7所示的各个步骤。
本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取存储器(RAM,Random AccessMemory)、磁盘或光盘等。
以上仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。