一种非关系型数据库关联数据的更新方法及系统与流程

文档序号:12863864阅读:296来源:国知局
一种非关系型数据库关联数据的更新方法及系统与流程

本发明涉及数据库领域,特别是涉及一种非关系型数据库关联数据的更新方法及系统。



背景技术:

非关系型数据库在处理海量数据,以及高可用性,可扩展性方面有极大的优势,能够解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用的难题。在关系型数据库中,通常将需要被关联表的信息作为字段值写入关联表中;在更新被关联表时,必须同时更新关联表的关联字段,否则会造成关联关系的缺失或失效。

而非关系型数据库去掉了关系型数据库的关系型特性,特别是表之间的关联关系;因此对于具有复杂数据结构和关联关系的非关系型数据库而言,在更新关联数据时,需要处理所有的关联关系,需要很高的学习成本和开发成本,且极易出错。



技术实现要素:

鉴于上述问题,提出了本发明实施例以便提供一种克服上述非关系型数据库关联数据更新成本过高且容易出错的问题或者至少部分地解决上述问题的一种非关系型数据库关联数据的更新方法及系统。

为了解决上述问题,本发明实施例公开了一种非关系型数据库关联数据的更新方法,包括:

接收非关系型数据库的更新信息;所述更新信息包括对应于所述更新信息的目标对象的更新属性的更新值;

加载预先建立的对应于所述目标对象的配置文件;所述配置文件包括所述目标对象的各关联对象的各关联属性、所述各关联属性的赋值方式;

解析所述配置文件,判断所述更新属性是否触发级联更新;

若所述更新属性触发级联更新,则根据各触发关联对象的触发关联属性的赋值方式,以及所述更新值,确定各所述触发关联属性的赋值;

根据所述目标对象的更新属性的更新值,以及各所述触发关联对象的触发关联属性的赋值,更新所述非关系型数据库。

优选地,所述配置文件为可扩展标记语言xml配置文件,通过预置的对象图导航语言ognl表达式描述所述各关联属性的赋值方式;

则所述若所述更新属性触发级联更新,则根据各触发关联对象的触发关联属性的赋值方式,以及所述更新值,确定各所述触发关联属性的赋值的步骤包括:

若所述更新属性触发级联更新,则确定所述xml配置文件中各触发关联对象的触发关联属性;

根据所述各触发关联对象的触发关联属性的ognl表达式,以及所述更新值,确定所述触发关联属性的赋值。

优选地,所述根据所述目标对象的更新属性的更新值,以及各所述触发关联对象的触发关联属性的赋值,更新所述非关系型数据库的步骤包括:

查询所述非关系型数据库,获取所述目标对象与所述各触发关联对象的属性信息并保存;

根据所述目标对象的更新属性的更新值,以及各所述触发关联对象的触发关联属性的赋值,更新保存的所述目标对象与所述各触发关联对象的属性信息;

将保存的所述目标对象与所述各触发关联对象的属性信息,作为整体,对所述非关系型数据库执行整体写入操作。

优选地,所述非关系型数据库为非键值对数据库时,所述根据所述目标对象的更新属性的更新值,以及各所述触发关联对象的触发关联属性的赋值,更新所述非关系型数据库的步骤包括:

将所述目标对象的更新属性的更新值,以及各所述触发关联对象的触发关联属性的赋值,作为整体,对所述非关系型数据库执行整体写入操作;

接收所述非关系型数据库,针对所述整体写入操作的响应;

根据所述响应,判断所述整体写入操作是否执行成功;

若所述整体写入操作未执行成功,则继续对所述非关系型数据库执行所述整体写入操作。

优选地,所述方法还包括:

若所述更新属性没有触发级联更新,则根据所述目标对象的更新属性的更新值,更新所述非关系型数据库。

优选地,所述方法还包括:

通过修改所述目标对象的配置文件,或者增加所述非关系型数据库中对象的配置文件,对所述非关系型数据库中各对象的关联关系进行修改或添加。

另一方面,本发明实施例还公开了一种非关系型数据库关联数据的更新系统,包括:

更新消息接收模块,用于接收非关系型数据库的更新信息;所述更新信息包括对应于所述更新信息的目标对象的更新属性的更新值;

配置文件加载模块,用于加载预先建立的对应于所述目标对象的配置文件;所述配置文件包括所述目标对象的各关联对象的各关联属性、所述各关联属性的赋值方式;

配置文件解析模块,用于解析所述配置文件,判断所述更新属性是否触发级联更新;

级联更新触发模块,用于若所述更新属性触发级联更新,则根据各触发关联对象的触发关联属性的赋值方式,以及所述更新值,确定各所述触发关联属性的赋值;

第一数据库更新模块,用于根据所述目标对象的更新属性的更新值,以及各所述触发关联对象的触发关联属性的赋值,更新所述非关系型数据库。

优选地,所述配置文件为可扩展标记语言xml配置文件,通过预置的对象图导航语言ognl表达式描述所述各关联属性的赋值方式;

则所述级联更新触发模块包括:

xml触发确认模块,用于若所述更新属性触发级联更新,则确定所述xml配置文件中各触发关联对象的触发关联属性;

ognl赋值模块,用于根据所述各触发关联对象的触发关联属性的ognl表达式,以及所述更新值,确定所述触发关联属性的赋值。

优选地,所述第一数据库更新模块包括:

对象数据保存模块,用于查询所述非关系型数据库,获取所述目标对象与所述各触发关联对象的属性信息并保存;

对象数据更新模块,用于根据所述目标对象的更新属性的更新值,以及各所述触发关联对象的触发关联属性的赋值,更新保存的所述目标对象与所述各触发关联对象的属性信息;

对象数据写入模块,用于将保存的所述目标对象与所述各触发关联对象的属性信息,作为整体,对所述非关系型数据库执行整体写入操作。

优选地,所述非关系型数据库为非键值对数据库时,所述第一数据库更新模块包括:

整体写入模块,用于将所述目标对象的更新属性的更新值,以及各所述触发关联对象的触发关联属性的赋值,作为整体,对所述非关系型数据库执行整体写入操作;

响应接收模块,用于接收所述非关系型数据库,针对所述整体写入操作的响应;

写入判断模块,用于根据所述响应,判断所述整体写入操作是否执行成功;

继续写入模块,用于若所述整体写入操作未执行成功,则继续对所述非关系型数据库执行所述整体写入操作。

优选地,所述系统还包括:

第二数据库更新模块,用于若所述更新属性没有触发级联更新,则根据所述目标对象的更新属性的更新值,更新所述非关系型数据库。

优选地,所述系统还包括:

配置文件更新模块,用于通过修改所述目标对象的配置文件,或者增加所述非关系型数据库中对象的配置文件,对所述非关系型数据库中各对象的关联关系进行修改或添加。

本发明实施例包括以下优点:

本发明实施例中,针对非关系型数据库中目标对象的更新属性的更新值,加载预先建立的针对目标对象的配置文件,通过解析上述配置文件中目标对象属性与关联对象属性之间的关联关系,确定触发级联更新的触发关联对象的触发关联属性的赋值,然后更新上述非关系型数据库;弥补了非关系型数据库在关联关系方面的弱点,能够低成本地完成对非关系型数据库关联数据的更新,且不易出错;预先建立的配置文件配置的是数据之间的关联关系,简单清晰,极易扩展,经过简单代码开发就可用于离线数据校验等其他与关联关系相关的工作;当关联关系需要变更时,不需要修改代码,只需要修改配置文件即可,节省开发时间;本发明实施例的技术方案简单易用,具有通用性。

附图说明

图1是本发明实施例的一种技术构思的示意图;

图2是本发明实施例一的一种非关系型数据库关联数据的更新方法的步骤流程图;

图3是本发明实施例二的一种非关系型数据库关联数据的更新方法的步骤流程图;

图4是本发明实施例三的一种非关系型数据库关联数据的更新系统的结构框图;

图5是本发明实施例四的一种非关系型数据库关联数据的更新系统的结构框图。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。

参照图1所示,提出了本发明实施例的技术构思之一,针对非关系型数据库中一目标对象(源对象)的更新属性的更新值,则上述非关系型数据库中目标对象及与目标对象相关联的关联对象中相应的属性均需要进行更新,即触发级联更新;因此通过找到预先配置的针对上述目标对象的xml(extensiblemarkuplanguage,可扩展标记语言)配置文件,上述xml配置文件中包括上述目标对象的各关联对象的各关联属性,以及通过ognl(object-graphnavigationlanguage,对象图导航语言,一种表达式语言,可以访问与对象关联的其它对象,可以存取对象的任意属性)表达式描述上述各关联属性的赋值方式;因此在解析配置文件,确认触发级联更新之后,确认上述xml配置文件中各触发关联对象的触发关联属性;通过依次处理上述对应的ognl表达式,获得上述各触发关联对象的触发关联属性的赋值;根据上述目标对象的更新属性的更新值,以及各上述触发关联对象(目标关系对象)的触发关联属性的赋值,更新上述非关系型数据库。

应该知晓的是,非关系型数据库至少分为键值对型数据库、列存储型数据库、文档型数据库、图形数据库等,只要存储的对象之间有关联关系且需要用户显式的维护这种关联关系,都可以采用本发明实施例的技术方案。另外,本发明实施例中对数据库的更新包括但不限于增加、删除、修改、更新等操作。

实施例一:

参照图2所示,本发明实施例提供了一种非关系型数据库关联数据的更新方法,可以包括步骤201-205:

步骤201:接收非关系型数据库的更新信息;所述更新信息包括对应于所述更新信息的目标对象的更新属性的更新值。

在本发明实施例中,接收非关系型数据库的更新信息;上述更新信息包括对应于上述更新信息的目标对象的更新属性的更新值。可以理解的是,上述接收的非关系型数据库的更新消息可以是一条,也可以是多条,本发明实施例对此不做限制。

例如,参照表1所示的一记录课程安排的键值对型非关系型数据库,或者参照表2所示的一记录课程安排的列存储型非关系型数据库,至少包括teacher这个对象,该对象至少包括name、coursename(课程名称)这两个属性;而因为teachera(教师a)生病,其教授的课程1暂停,改为teacherb教授课程2,而课程时间地点没变,那么存在两条更新消息:目标对象teacher的更新属性name更新值为b,以及目标对象teacher的更新属性coursename更新值为2。

表1

表2

步骤202:加载预先建立的对应于所述目标对象的配置文件;所述配置文件包括所述目标对象的各关联对象的各关联属性、所述各关联属性的赋值方式。

在本发明实施例中,加载预先建立的对应于上述目标对象的配置文件;上述配置文件包括上述目标对象的各关联对象的各关联属性、上述各关联属性的赋值方式。

可以得知的是,本发明实施例中针对非关系型数据库中的各对象建立了对应的配置文件,该配置文件中包括上述目标对象的各关联对象的各关联属性、上述各关联属性的赋值方式,该配置文件可以以任意形式存在,例如xml配置文件;还可以是以映射表的形式,比如目标对象的各属性和上述各属性关联的其它对象的对应关联属性的映射关系,还有上述对应关联属性和对应赋值方式的映射关系。

例如,对于上述表1或者表2所示的非关系型数据库,预先建立针对其中对象teacher、student的配置文件。对于对象teacher而言,对应的配置文件中至少包括其属性name与对象student的属性teachername的映射关系,因为二者存在关联关系;还应该包括上述对象teacher的属性name与对象student的属性teachername之间的赋值关系,在此处示意性的可以表达为student.teachername=teacher.name;同理,teacher.coursename与student.coursename存在关联关系,且teacher.coursename=student.coursename。

步骤203:解析所述配置文件,判断所述更新属性是否触发级联更新。

在本发明实施例中,解析上述配置文件,判断上述更新属性是否触发级联更新。例如,对于上述表1或者表2所示的非关系型数据库,判断目标对象teacher的更新属性name是否触发级联更新,可以通过解析对应的配置文件进行,可以通过遍历所有属性的方式,查看上述配置文件中是否存在该属性的关联对象的关联属性。可以理解的是,经过解析,目标对象teacher的更新属性name触发级联更新,目标对象teacher的更新属性coursename同样触发级联更新。

遍历上述配置文件,判断是否存在与上述更新属性相关联的触发关联对象的触发关联属性;若存在与上述更新属性相关联的触发关联对象的触发关联属性,则上述更新属性触发级联更新。

若上述更新属性触发级联更新,则执行步骤204;若上述更新属性没有触发级联更新,即上述非关系型数据中没有其它关联对象需要更新,仅需要更新目标对象。

步骤204:若所述更新属性触发级联更新,则根据各触发关联对象的触发关联属性的赋值方式,以及所述更新值,确定各所述触发关联属性的赋值。

在本发明实施例中,若上述更新属性触发级联更新,则根据各触发关联对象的触发关联属性的赋值方式,以及上述更新值,确定各上述触发关联属性的赋值。在本发明实施例的一种实施方式中,参照上述表1或者表2所示的非关系型数据库,目标对象的teacher的更新属性name触发级联更新,则根据触发关联对象student的触发关联属性teachername的赋值方式student.teachername=teacher.name,以及所述teacher.name更新值b,确定该触发关联对象的触发关联属性student.teachername的更新值为b;同理确定teacher.coursename的触发关联对象的触发关联属性student.coursename的更新值为2。

步骤205:根据所述目标对象的更新属性的更新值,以及各所述触发关联对象的触发关联属性的赋值,更新所述非关系型数据库。

在本发明实施例中,根据上述目标对象的更新属性的更新值,以及各上述触发关联对象的触发关联属性的赋值,更新上述非关系型数据库。

举例说明,对一非关系型数据库,已经获知目标对象的更新属性teacher.name更新值b,其触发关联对象的触发关联属性student.teachername更新值b;teacher.coursename更新值2,其触发关联对象的触发关联属性student.coursename更新值2。更新上述非关系型数据库,可以通过获取对象teacher和对象student的所有属性信息,在上述所有属性信息中更新上述更新值,再将经过更新的对象teacher和对象student的所有属性信息写入非关系型数据库中,上述的更新方式适用于所有非关系型数据库,尤其是类似表1这样的键值对型数据库,因为其中value存储的是对应于对象(键值)的整体数据,只能整体更新。

而对于非键值对型的非关系型数据库而言,例如类似表2这样的列存储型数据库,则可以只更新teacher.name、teacher.coursename这样的目标对象的更新属性,以及student.teachername、student.coursename这样的触发关联对象的触发关联属性,而不需要更新其它属性。

本发明实施例中,针对非关系型数据库中目标对象的更新属性的更新值,加载预先建立的针对目标对象的配置文件,通过解析上述配置文件中目标对象属性与关联对象属性之间的关联关系,确定触发级联更新的触发关联对象的触发关联属性的赋值,然后更新上述非关系型数据库;弥补了非关系型数据库在关联关系方面的弱点,能够低成本地完成对非关系型数据库关联数据的更新,且不易出错;预先建立的配置文件配置的是数据之间的关联关系,简单清晰,极易扩展,经过简单代码开发就可用于离线数据校验等其他与关联关系相关的工作;当关联关系需要变更时,不需要修改代码,只需要修改配置文件即可,节省开发时间;本发明实施例的技术方案简单易用,具有通用性。

实施例二:

在本发明实施例中,针对非关系型数据库中的对象,预先建立针对各对象的xml配置文件,通过预置的ognl表达式描述各关联属性的赋值方式。

以自定义xml文件的方式设置对象之间的关联关系,在配置文件中声明关联关系的具体细节:如目标对象,会触发关联关系的目标对象属性,对应的关联对象,以及关联对象的关联属性赋值方式等,定义格式如下:

对以上xml文件解释如下:

1)entity标签:对象类型的声明标签,type属性指定对象类型;

2)cascade标签:关联关系标签,一个cascade声明一种关联关系,一个对象可以有多种关联关系,所以一个entity中可以包含多个cascade。如对象a通过属性x与对象b的属性y有关联关系,同时,a通过属性a与对象c的属性z也有关联关系,那么entitya中就会包含两个cascade,分别对应a.x<—>b.y和a.a<—>c.z的关联关系;

3)src-field标签:声明会触发关联关系的属性,该属性属于对象,用complex标记该属性的类型,属性可以是简单类型也可以是复合类型,如果是复合类型,complex标记为true;type标明该属性的对象类型(面向对象语言中的class),通过反射的方式,根据对象类型即可生成对象;src-field的值即为该属性在对象中的属性名称;

4)target标签:关联对象类型的声明标签,type指定关联对象的类型,id标明如何为关联对象的id赋值;

5)complex-value/single-value标签:复合类型/简单类型数据标签,复合类型是由简单类型组成的,name属性标明在关联对象中的属性名称,标签值为指定属性值;type属性标明该属性的对象类型,通过反射的方式生成对象;from-db属性用于指定:当无法从此次写入的对象中获取标签值的话,是否可从数据库中已有的对象中获取。

在xml文件中,属性名及值等都是符合ognl语法的字符串,如下:

<single-valuename=”teacherinfo.name”>metadata.name</single>

ognl是一种表达式语言,通过简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现属性类型转换等功能。在本发明中,利用ognl,可实现读取对象的属性值和设置目标对象的属性值,只要将xml标签的值以ognl的语法书写即可。即非关系型数据库中的属性值(属性的赋值或者更新值),采用字符串的形式,或者在xml文件中采用字符串的形式对属性值进行转换即可;

使用方法是:

1)将目标对象以特定key存到ognl的上下文中;

2)按target标签的type属性值,使用反射的方式生成目标对象的关联对象,并将其以特定的key存入ognl上下文中;

3)依次处理complex-value/single-value标签,将标签值(一个用ognl语法表达的字符串)代入目标对象key的ognl表达式中,所获取的值,即为目标对象的关联对象的属性值,然后根据标签中的name属性值(也是用ognl语法表达的字符串),代入目标关联对象key的ognl表达式中,实现将属性值赋给目标对象的关联对象的关联属性的目的。

xml配置文件中的ognl表达式如下示例:<single-valuename=”field1”>fielda.fieldb</single-value>。single-value的标签值fielda.fieldb表示目标对象中的复合数据类型fielda中的简单数据类型fieldb的值;name属性值field1表示目标对象的关联对象中名字为field1的属性;整个一行配置的意思是:将目标对象的属性fielda.fieldb的值赋给目标对象的关联对象的关联属性field1。

参照图3所示,本发明实施例提供了一种非关系型数据库关联数据的更新方法,可以包括步骤301-307:

步骤301:接收非关系型数据库的更新信息;所述更新信息包括对应于所述更新信息的目标对象的更新属性的更新值。

步骤302:加载预先建立的对应于所述目标对象的配置文件;所述配置文件包括所述目标对象的各关联对象的各关联属性、所述各关联属性的赋值方式;所述配置文件为可扩展标记语言xml配置文件,通过预置的对象图导航语言ognl表达式描述所述各关联属性的赋值方式。

在本发明实施例的一种实施方式中,上述配置文件可以为xml配置文件,而且通过ognl语言能够访问对象及其关联对象的属性的特性,在xml配置文件中采用ognl表达式描述上述各关联属性的赋值方式。

步骤303:解析所述配置文件,判断所述更新属性是否触发级联更新。

若上述更新属性触发级联更新,则执行步骤305;若上述更新属性未触发级联更新,则执行步骤304。例如,可以通过字符串过滤的方式,针对上述更新属性,对上述配置文件进行解析;也可以通过针对于配置文件的模板,进行针对性的解析,还可以通过其他方式。

步骤304:若所述更新属性没有触发级联更新,则根据所述目标对象的更新属性的更新值,更新所述非关系型数据库。

若上述更新属性没有触发级联更新,则根据上述目标对象的更新属性的更新值,更新上述非关系型数据库。值得说明的是,因为非关系型数据库有多种不同的类型,面对不同类型的非关系型数据库,更新方式也不一样。例如,对于键值对数据库进行更新时,是以对象(键值)为单位的,即欲更新某一对象的某个属性,则需要同时对该对象的所有属性进行写入。

步骤305:若所述更新属性触发级联更新,则确定所述xml配置文件中各触发关联对象的触发关联属性。

在本发明实施例中,若上述更新属性触发级联更新,则确定上述xml配置文件中各触发关联对象的触发关联属性。在下面的例子中,进一步详细说明。

步骤306:根据所述各触发关联对象的触发关联属性的ognl表达式,以及所述更新值,确定所述触发关联属性的赋值。

在本发明实施例中,根据上述各触发关联对象的触发关联属性的ognl表达式,以及上述更新值,确定上述触发关联属性的赋值,在下面的例子中,可以进一步详细说明。

步骤307:根据所述目标对象的更新属性的更新值,以及各所述触发关联对象的触发关联属性的赋值,更新所述非关系型数据库。

优选地,所述步骤307,可以包括:

查询所述非关系型数据库,获取所述目标对象与所述各触发关联对象的属性信息并保存;根据所述目标对象的更新属性的更新值,以及各所述触发关联对象的触发关联属性的赋值,更新保存的所述目标对象与所述各触发关联对象的属性信息;将保存的所述目标对象与所述各触发关联对象的属性信息,作为整体,对所述非关系型数据库执行整体写入操作。

可以理解的是,上述获取上述目标对象与上述各触发关联对象的属性信息并保存的步骤只要在对上述目标对象与上述各触发关联对象进行更新之前执行即可;还可以选择在上述步骤306之前执行,使得在执行步骤306之后,即在确定上述触发关联属性的赋值之后,即可直接更新保存的上述目标对象与上述各触发关联对象。

优选地,所述非关系型数据库为非键值对数据库时,所述步骤307,可以包括:

将所述目标对象的更新属性的更新值,以及各所述触发关联对象的触发关联属性的赋值,作为整体,对所述非关系型数据库执行整体写入操作;接收所述非关系型数据库,针对所述整体写入操作的响应;根据所述响应,判断所述整体写入操作是否执行成功;若所述整体写入操作未执行成功,则继续对所述非关系型数据库执行所述整体写入操作。

优选地,通过修改所述目标对象的配置文件,或者增加所述非关系型数据库中对象的配置文件,对所述非关系型数据库中各对象的关联关系进行修改或添加。如此,可以方便的对目标对象的关联关系进行更新,或者对其它对象建立包含关联关系的配置文件。

下面结合具体例子,对上述步骤301-307,作进一步详细的说明。

例如,一非关系型数据库中存在有学生表和教师表,分别用student和teacher表示这两个对象。对象student会存储关联teacher的一些信息,对象teacher也会存储其教授的student的信息,例如下面定义的实体:

试想一种情况,当修改teacher.metadata,修改了教师的名字或者其教授的课程;由于student.teacherinfo中也存储了该教师的名字和授课名称,所以需要同步的修改,即可使用本发明实施例的技术方案。

以列存储型数据库的更新为例,因为列存储型数据库可以只更新关心的列,而不用更新整个对象,基本步骤如下:

1.接收一条更新消息message1,更新teacher.metadata,修改了教师的名字和其教授的课程名称;

2.根据message1.id查询上述非关系型数据库中已存在的该实体对象message_exist,因为如本例中的情况,级联关系属性studentinfo可能不在本次修改的message1中,但确实metadata属性会触发级联关系,所以需要从message_exist中的studentinfo中获取级联的student信息;message_exist会在步骤5中使用;

3.根据目标对象的类型teacher查询到定义的xml配置文件;

4.用xml配置文件检查更新消息message1中的字段,检查是否会触发级联更新,在本例中,属性teacher.metadata的修改会触发级联更新,进入步骤5;

5.配置文件中会指明级联关系的赋值方式,在本例中,就是teacher.metadata和student.teacherinfo之间的赋值方式,如将teacher.metadata.name赋值给student.teacherinfo.name等。而需要修改的student的id可以通过teacher.studentinfo.id获取;可以通过遍历xml的配置项可完成赋值操作。

6.如果teacher包括多个studentinfo,那么通过步骤4就会生成多条关于student.teacherinfo的更新信息,即message2,message3……messagen,将它们与message1作为一个整体一起提交给数据库,如有一条失败,即可返回失败,则需要重新写入,以保证级联关系的一致性。

下面以键值对(key-value)非关系型数据库的更新为例,仍然针对上述定义实体,由于key-value数据库中的value存储的是message整体,更新时需要首先获取数据库中的原始message,更新某些属性后,再整体重新写回数据库,基本步骤如下:

1.接收一条更新消息message1,更新teacher.metadata,修改了教师的名字和其教授的课程名称;

2.根据更新实体的类型teacher查询到定义的xml配置文件;

3.用xml配置文件检查更新消息message1中的字段,检查是否会触发级联更新,在本例中,teacher.metadata的修改会触发级联更新,进入步骤4;

4.根据student.id查询数据库,获取已存的student原始message2;

5.配置文件中会指明级联关系的赋值方式,在本例中,就是teacher.metadata和student.teacherinfo之间的赋值方式,如将teacher.metadata.name赋值给student.teacherinfo.name等。通过程序代码,遍历xml的配置项可完成赋值操作。赋值操作在步骤4获取的原始数据message2上执行即可,即更新message2中的部分字段值。

6.如果teacher包括多个studentinfo,那么通过步骤4就会生成多条student的更新消息,即message2,message3……messagen,将它们与message1作为一个整体一起写入给数据库即可。

针对上述采用ognl表达式的赋值方式,举例如下:

//ognl模板方法如下:

ognlcontextcontext=newonglcontext();

//加载配置文件,并赋值;其中的cascadeobject和originalobject就是上文中的//message2和message1,作为固定名称放入ognlcontext中,以便模板使用;

//通过如下ognl的语法,即可实现对student.teacherinfo.name的赋值

ognl.setvalue(“cascadeobject.teacherinfo.name”,context,

ognl.getvalue(“orginalobject.metadata.name”));

执行完所有的xml配置项后,只要把ognlcontext中的cascadeobject取出,就是生成的message2。

本发明实施例中,针对非关系型数据库中目标对象的更新属性的更新值,加载预先建立的针对目标对象的xml配置文件,通过解析上述配置文件中目标对象属性与关联对象属性之间的关联关系,通过ognl表达式确定触发级联更新的触发关联对象的触发关联属性的赋值,然后更新上述非关系型数据库;弥补了非关系型数据库在关联关系方面的弱点,能够低成本地完成对非关系型数据库关联数据的更新,且不易出错;预先建立的xml配置文件结合ognl表达式,配置的是数据之间的关联关系,使得对象的访问方式变得极其简单和统一,关联关系简单清晰,极易扩展,经过简单代码开发就可用于离线数据校验等其他与关联关系相关的工作;当关联关系需要变更时,不需要修改代码,只需要修改配置文件即可,节省开发时间;本发明实施例的技术方案简单易用,具有通用性。

本发明实施例的优选方式中,将上述目标对象与上述各触发关联对象的属性信息,作为整体写入上述非关系型数据库,具有通用性,同时保证了关联数据更新的一致性。

本发明实施例的优选方式中,对于非键值对型非关系型数据库,仅更新上述目标对象的更新属性与上述各触发关联对象的触发关联属性,可以减小处理负担,提升更新效率。

本发明实施例的优选方式中,修改上述目标对象的配置文件,或者增加上述非关系型数据库中对象的配置文件,可以方便的对目标对象的关联关系进行更新,或者对其它对象建立包含关联关系的配置文件,便于关联关系的扩展与维护。

需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。

实施例三:

参照图4所示,本发明实施例提供了一种非关系型数据库关联数据的更新系统,可以包括:

更新消息接收模块401,用于接收非关系型数据库的更新信息;所述更新信息包括对应于所述更新信息的目标对象的更新属性的更新值;

配置文件加载模块402,用于加载预先建立的对应于所述目标对象的配置文件;所述配置文件包括所述目标对象的各关联对象的各关联属性、所述各关联属性的赋值方式;

配置文件解析模块403,用于解析所述配置文件,判断所述更新属性是否触发级联更新;

级联更新触发模块404,用于若所述更新属性触发级联更新,则根据各触发关联对象的触发关联属性的赋值方式,以及所述更新值,确定各所述触发关联属性的赋值;

第一数据库更新模块405,用于根据所述目标对象的更新属性的更新值,以及各所述触发关联对象的触发关联属性的赋值,更新所述非关系型数据库。

本发明实施例中,针对非关系型数据库中目标对象的更新属性的更新值,加载预先建立的针对目标对象的配置文件,通过解析上述配置文件中目标对象属性与关联对象属性之间的关联关系,确定触发级联更新的触发关联对象的触发关联属性的赋值,然后更新上述非关系型数据库;弥补了非关系型数据库在关联关系方面的弱点,能够低成本地完成对非关系型数据库关联数据的更新,且不易出错;预先建立的配置文件配置的是数据之间的关联关系,简单清晰,极易扩展,经过简单代码开发就可用于离线数据校验等其他与关联关系相关的工作;当关联关系需要变更时,不需要修改代码,只需要修改配置文件即可,节省开发时间;本发明实施例的技术方案简单易用,具有通用性。

实施例四:

参照图5所示,本发明实施例提供了一种非关系型数据库关联数据的更新系统,可以包括:

更新消息接收模块401,用于接收非关系型数据库的更新信息;所述更新信息包括对应于所述更新信息的目标对象的更新属性的更新值;

配置文件加载模块402,用于加载预先建立的对应于所述目标对象的配置文件;所述配置文件包括所述目标对象的各关联对象的各关联属性、所述各关联属性的赋值方式;

所述配置文件为可扩展标记语言xml配置文件,通过预置的对象图导航语言ognl表达式描述所述各关联属性的赋值方式;

配置文件解析模块403,用于解析所述配置文件,判断所述更新属性是否触发级联更新;

第二数据库更新模块406,用于若所述更新属性没有触发级联更新,则根据所述目标对象的更新属性的更新值,更新所述非关系型数据库;

xml触发确认模块40401,用于若所述更新属性触发级联更新,则确定所述xml配置文件中各触发关联对象的触发关联属性;

ognl赋值模块40402,用于根据所述各触发关联对象的触发关联属性的ognl表达式,以及所述更新值,确定所述触发关联属性的赋值;

第一数据库更新模块405,用于根据所述目标对象的更新属性的更新值,以及各所述触发关联对象的触发关联属性的赋值,更新所述非关系型数据库。

优选地,所述第一数据库更新模块405,可以包括:

对象数据保存模块,用于查询所述非关系型数据库,获取所述目标对象与所述各触发关联对象的属性信息并保存;

对象数据更新模块,用于根据所述目标对象的更新属性的更新值,以及各所述触发关联对象的触发关联属性的赋值,更新保存的所述目标对象与所述各触发关联对象的属性信息;

对象数据写入模块,用于将保存的所述目标对象与所述各触发关联对象的属性信息,作为整体,对所述非关系型数据库执行整体写入操作。

优选地,所述非关系型数据库为非键值对数据库时,所述第一数据库更新模块405,可以包括:

整体写入模块,用于将所述目标对象的更新属性的更新值,以及各所述触发关联对象的触发关联属性的赋值,作为整体,对所述非关系型数据库执行整体写入操作;

响应接收模块,用于接收所述非关系型数据库,针对所述整体写入操作的响应;

写入判断模块,用于根据所述响应,判断所述整体写入操作是否执行成功;

继续写入模块,用于若所述整体写入操作未执行成功,则继续对所述非关系型数据库执行所述整体写入操作。

优选地,所述系统还可以包括:

配置文件更新模块,用于通过修改所述目标对象的配置文件,或者增加所述非关系型数据库中对象的配置文件,对所述非关系型数据库中各对象的关联关系进行修改或添加。

本发明实施例中,针对非关系型数据库中目标对象的更新属性的更新值,加载预先建立的针对目标对象的xml配置文件,通过解析上述配置文件中目标对象属性与关联对象属性之间的关联关系,通过ognl表达式确定触发级联更新的触发关联对象的触发关联属性的赋值,然后更新上述非关系型数据库;弥补了非关系型数据库在关联关系方面的弱点,能够低成本地完成对非关系型数据库关联数据的更新,且不易出错;预先建立的xml配置文件结合ognl表达式,配置的是数据之间的关联关系,使得对象的访问方式变得极其简单和统一,关联关系简单清晰,极易扩展,经过简单代码开发就可用于离线数据校验等其他与关联关系相关的工作;当关联关系需要变更时,不需要修改代码,只需要修改配置文件即可,节省开发时间;本发明实施例的技术方案简单易用,具有通用性。

本发明实施例的优选方式中,将上述目标对象与上述各触发关联对象的属性信息,作为整体写入上述非关系型数据库,具有通用性,同时保证了关联数据更新的一致性。

本发明实施例的优选方式中,对于非键值对型非关系型数据库,仅更新上述目标对象的更新属性与上述各触发关联对象的触发关联属性,可以减小处理负担,提升更新效率。

本发明实施例的优选方式中,修改上述目标对象的配置文件,或者增加上述非关系型数据库中对象的配置文件,可以方便的对目标对象的关联关系进行更新,或者对其它对象建立包含关联关系的配置文件,便于关联关系的扩展与维护。

对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。

以上对本发明所提供的一种非关系型数据库关联数据的更新方法及系统,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1