欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種非關系型數據庫關聯(lián)數據的更新方法及系統(tǒng)與流程

文檔序號:12863864閱讀:364來源:國知局
一種非關系型數據庫關聯(lián)數據的更新方法及系統(tǒng)與流程

本發(fā)明涉及數據庫領域,特別是涉及一種非關系型數據庫關聯(lián)數據的更新方法及系統(tǒng)。



背景技術:

非關系型數據庫在處理海量數據,以及高可用性,可擴展性方面有極大的優(yōu)勢,能夠解決大規(guī)模數據集合多重數據種類帶來的挑戰(zhàn),尤其是大數據應用的難題。在關系型數據庫中,通常將需要被關聯(lián)表的信息作為字段值寫入關聯(lián)表中;在更新被關聯(lián)表時,必須同時更新關聯(lián)表的關聯(lián)字段,否則會造成關聯(lián)關系的缺失或失效。

而非關系型數據庫去掉了關系型數據庫的關系型特性,特別是表之間的關聯(lián)關系;因此對于具有復雜數據結構和關聯(lián)關系的非關系型數據庫而言,在更新關聯(lián)數據時,需要處理所有的關聯(lián)關系,需要很高的學習成本和開發(fā)成本,且極易出錯。



技術實現(xiàn)要素:

鑒于上述問題,提出了本發(fā)明實施例以便提供一種克服上述非關系型數據庫關聯(lián)數據更新成本過高且容易出錯的問題或者至少部分地解決上述問題的一種非關系型數據庫關聯(lián)數據的更新方法及系統(tǒng)。

為了解決上述問題,本發(fā)明實施例公開了一種非關系型數據庫關聯(lián)數據的更新方法,包括:

接收非關系型數據庫的更新信息;所述更新信息包括對應于所述更新信息的目標對象的更新屬性的更新值;

加載預先建立的對應于所述目標對象的配置文件;所述配置文件包括所述目標對象的各關聯(lián)對象的各關聯(lián)屬性、所述各關聯(lián)屬性的賦值方式;

解析所述配置文件,判斷所述更新屬性是否觸發(fā)級聯(lián)更新;

若所述更新屬性觸發(fā)級聯(lián)更新,則根據各觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的賦值方式,以及所述更新值,確定各所述觸發(fā)關聯(lián)屬性的賦值;

根據所述目標對象的更新屬性的更新值,以及各所述觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的賦值,更新所述非關系型數據庫。

優(yōu)選地,所述配置文件為可擴展標記語言xml配置文件,通過預置的對象圖導航語言ognl表達式描述所述各關聯(lián)屬性的賦值方式;

則所述若所述更新屬性觸發(fā)級聯(lián)更新,則根據各觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的賦值方式,以及所述更新值,確定各所述觸發(fā)關聯(lián)屬性的賦值的步驟包括:

若所述更新屬性觸發(fā)級聯(lián)更新,則確定所述xml配置文件中各觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性;

根據所述各觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的ognl表達式,以及所述更新值,確定所述觸發(fā)關聯(lián)屬性的賦值。

優(yōu)選地,所述根據所述目標對象的更新屬性的更新值,以及各所述觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的賦值,更新所述非關系型數據庫的步驟包括:

查詢所述非關系型數據庫,獲取所述目標對象與所述各觸發(fā)關聯(lián)對象的屬性信息并保存;

根據所述目標對象的更新屬性的更新值,以及各所述觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的賦值,更新保存的所述目標對象與所述各觸發(fā)關聯(lián)對象的屬性信息;

將保存的所述目標對象與所述各觸發(fā)關聯(lián)對象的屬性信息,作為整體,對所述非關系型數據庫執(zhí)行整體寫入操作。

優(yōu)選地,所述非關系型數據庫為非鍵值對數據庫時,所述根據所述目標對象的更新屬性的更新值,以及各所述觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的賦值,更新所述非關系型數據庫的步驟包括:

將所述目標對象的更新屬性的更新值,以及各所述觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的賦值,作為整體,對所述非關系型數據庫執(zhí)行整體寫入操作;

接收所述非關系型數據庫,針對所述整體寫入操作的響應;

根據所述響應,判斷所述整體寫入操作是否執(zhí)行成功;

若所述整體寫入操作未執(zhí)行成功,則繼續(xù)對所述非關系型數據庫執(zhí)行所述整體寫入操作。

優(yōu)選地,所述方法還包括:

若所述更新屬性沒有觸發(fā)級聯(lián)更新,則根據所述目標對象的更新屬性的更新值,更新所述非關系型數據庫。

優(yōu)選地,所述方法還包括:

通過修改所述目標對象的配置文件,或者增加所述非關系型數據庫中對象的配置文件,對所述非關系型數據庫中各對象的關聯(lián)關系進行修改或添加。

另一方面,本發(fā)明實施例還公開了一種非關系型數據庫關聯(lián)數據的更新系統(tǒng),包括:

更新消息接收模塊,用于接收非關系型數據庫的更新信息;所述更新信息包括對應于所述更新信息的目標對象的更新屬性的更新值;

配置文件加載模塊,用于加載預先建立的對應于所述目標對象的配置文件;所述配置文件包括所述目標對象的各關聯(lián)對象的各關聯(lián)屬性、所述各關聯(lián)屬性的賦值方式;

配置文件解析模塊,用于解析所述配置文件,判斷所述更新屬性是否觸發(fā)級聯(lián)更新;

級聯(lián)更新觸發(fā)模塊,用于若所述更新屬性觸發(fā)級聯(lián)更新,則根據各觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的賦值方式,以及所述更新值,確定各所述觸發(fā)關聯(lián)屬性的賦值;

第一數據庫更新模塊,用于根據所述目標對象的更新屬性的更新值,以及各所述觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的賦值,更新所述非關系型數據庫。

優(yōu)選地,所述配置文件為可擴展標記語言xml配置文件,通過預置的對象圖導航語言ognl表達式描述所述各關聯(lián)屬性的賦值方式;

則所述級聯(lián)更新觸發(fā)模塊包括:

xml觸發(fā)確認模塊,用于若所述更新屬性觸發(fā)級聯(lián)更新,則確定所述xml配置文件中各觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性;

ognl賦值模塊,用于根據所述各觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的ognl表達式,以及所述更新值,確定所述觸發(fā)關聯(lián)屬性的賦值。

優(yōu)選地,所述第一數據庫更新模塊包括:

對象數據保存模塊,用于查詢所述非關系型數據庫,獲取所述目標對象與所述各觸發(fā)關聯(lián)對象的屬性信息并保存;

對象數據更新模塊,用于根據所述目標對象的更新屬性的更新值,以及各所述觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的賦值,更新保存的所述目標對象與所述各觸發(fā)關聯(lián)對象的屬性信息;

對象數據寫入模塊,用于將保存的所述目標對象與所述各觸發(fā)關聯(lián)對象的屬性信息,作為整體,對所述非關系型數據庫執(zhí)行整體寫入操作。

優(yōu)選地,所述非關系型數據庫為非鍵值對數據庫時,所述第一數據庫更新模塊包括:

整體寫入模塊,用于將所述目標對象的更新屬性的更新值,以及各所述觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的賦值,作為整體,對所述非關系型數據庫執(zhí)行整體寫入操作;

響應接收模塊,用于接收所述非關系型數據庫,針對所述整體寫入操作的響應;

寫入判斷模塊,用于根據所述響應,判斷所述整體寫入操作是否執(zhí)行成功;

繼續(xù)寫入模塊,用于若所述整體寫入操作未執(zhí)行成功,則繼續(xù)對所述非關系型數據庫執(zhí)行所述整體寫入操作。

優(yōu)選地,所述系統(tǒng)還包括:

第二數據庫更新模塊,用于若所述更新屬性沒有觸發(fā)級聯(lián)更新,則根據所述目標對象的更新屬性的更新值,更新所述非關系型數據庫。

優(yōu)選地,所述系統(tǒng)還包括:

配置文件更新模塊,用于通過修改所述目標對象的配置文件,或者增加所述非關系型數據庫中對象的配置文件,對所述非關系型數據庫中各對象的關聯(lián)關系進行修改或添加。

本發(fā)明實施例包括以下優(yōu)點:

本發(fā)明實施例中,針對非關系型數據庫中目標對象的更新屬性的更新值,加載預先建立的針對目標對象的配置文件,通過解析上述配置文件中目標對象屬性與關聯(lián)對象屬性之間的關聯(lián)關系,確定觸發(fā)級聯(lián)更新的觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的賦值,然后更新上述非關系型數據庫;彌補了非關系型數據庫在關聯(lián)關系方面的弱點,能夠低成本地完成對非關系型數據庫關聯(lián)數據的更新,且不易出錯;預先建立的配置文件配置的是數據之間的關聯(lián)關系,簡單清晰,極易擴展,經過簡單代碼開發(fā)就可用于離線數據校驗等其他與關聯(lián)關系相關的工作;當關聯(lián)關系需要變更時,不需要修改代碼,只需要修改配置文件即可,節(jié)省開發(fā)時間;本發(fā)明實施例的技術方案簡單易用,具有通用性。

附圖說明

圖1是本發(fā)明實施例的一種技術構思的示意圖;

圖2是本發(fā)明實施例一的一種非關系型數據庫關聯(lián)數據的更新方法的步驟流程圖;

圖3是本發(fā)明實施例二的一種非關系型數據庫關聯(lián)數據的更新方法的步驟流程圖;

圖4是本發(fā)明實施例三的一種非關系型數據庫關聯(lián)數據的更新系統(tǒng)的結構框圖;

圖5是本發(fā)明實施例四的一種非關系型數據庫關聯(lián)數據的更新系統(tǒng)的結構框圖。

具體實施方式

為使本發(fā)明的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結合附圖和具體實施方式對本發(fā)明作進一步詳細的說明。

參照圖1所示,提出了本發(fā)明實施例的技術構思之一,針對非關系型數據庫中一目標對象(源對象)的更新屬性的更新值,則上述非關系型數據庫中目標對象及與目標對象相關聯(lián)的關聯(lián)對象中相應的屬性均需要進行更新,即觸發(fā)級聯(lián)更新;因此通過找到預先配置的針對上述目標對象的xml(extensiblemarkuplanguage,可擴展標記語言)配置文件,上述xml配置文件中包括上述目標對象的各關聯(lián)對象的各關聯(lián)屬性,以及通過ognl(object-graphnavigationlanguage,對象圖導航語言,一種表達式語言,可以訪問與對象關聯(lián)的其它對象,可以存取對象的任意屬性)表達式描述上述各關聯(lián)屬性的賦值方式;因此在解析配置文件,確認觸發(fā)級聯(lián)更新之后,確認上述xml配置文件中各觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性;通過依次處理上述對應的ognl表達式,獲得上述各觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的賦值;根據上述目標對象的更新屬性的更新值,以及各上述觸發(fā)關聯(lián)對象(目標關系對象)的觸發(fā)關聯(lián)屬性的賦值,更新上述非關系型數據庫。

應該知曉的是,非關系型數據庫至少分為鍵值對型數據庫、列存儲型數據庫、文檔型數據庫、圖形數據庫等,只要存儲的對象之間有關聯(lián)關系且需要用戶顯式的維護這種關聯(lián)關系,都可以采用本發(fā)明實施例的技術方案。另外,本發(fā)明實施例中對數據庫的更新包括但不限于增加、刪除、修改、更新等操作。

實施例一:

參照圖2所示,本發(fā)明實施例提供了一種非關系型數據庫關聯(lián)數據的更新方法,可以包括步驟201-205:

步驟201:接收非關系型數據庫的更新信息;所述更新信息包括對應于所述更新信息的目標對象的更新屬性的更新值。

在本發(fā)明實施例中,接收非關系型數據庫的更新信息;上述更新信息包括對應于上述更新信息的目標對象的更新屬性的更新值。可以理解的是,上述接收的非關系型數據庫的更新消息可以是一條,也可以是多條,本發(fā)明實施例對此不做限制。

例如,參照表1所示的一記錄課程安排的鍵值對型非關系型數據庫,或者參照表2所示的一記錄課程安排的列存儲型非關系型數據庫,至少包括teacher這個對象,該對象至少包括name、coursename(課程名稱)這兩個屬性;而因為teachera(教師a)生病,其教授的課程1暫停,改為teacherb教授課程2,而課程時間地點沒變,那么存在兩條更新消息:目標對象teacher的更新屬性name更新值為b,以及目標對象teacher的更新屬性coursename更新值為2。

表1

表2

步驟202:加載預先建立的對應于所述目標對象的配置文件;所述配置文件包括所述目標對象的各關聯(lián)對象的各關聯(lián)屬性、所述各關聯(lián)屬性的賦值方式。

在本發(fā)明實施例中,加載預先建立的對應于上述目標對象的配置文件;上述配置文件包括上述目標對象的各關聯(lián)對象的各關聯(lián)屬性、上述各關聯(lián)屬性的賦值方式。

可以得知的是,本發(fā)明實施例中針對非關系型數據庫中的各對象建立了對應的配置文件,該配置文件中包括上述目標對象的各關聯(lián)對象的各關聯(lián)屬性、上述各關聯(lián)屬性的賦值方式,該配置文件可以以任意形式存在,例如xml配置文件;還可以是以映射表的形式,比如目標對象的各屬性和上述各屬性關聯(lián)的其它對象的對應關聯(lián)屬性的映射關系,還有上述對應關聯(lián)屬性和對應賦值方式的映射關系。

例如,對于上述表1或者表2所示的非關系型數據庫,預先建立針對其中對象teacher、student的配置文件。對于對象teacher而言,對應的配置文件中至少包括其屬性name與對象student的屬性teachername的映射關系,因為二者存在關聯(lián)關系;還應該包括上述對象teacher的屬性name與對象student的屬性teachername之間的賦值關系,在此處示意性的可以表達為student.teachername=teacher.name;同理,teacher.coursename與student.coursename存在關聯(lián)關系,且teacher.coursename=student.coursename。

步驟203:解析所述配置文件,判斷所述更新屬性是否觸發(fā)級聯(lián)更新。

在本發(fā)明實施例中,解析上述配置文件,判斷上述更新屬性是否觸發(fā)級聯(lián)更新。例如,對于上述表1或者表2所示的非關系型數據庫,判斷目標對象teacher的更新屬性name是否觸發(fā)級聯(lián)更新,可以通過解析對應的配置文件進行,可以通過遍歷所有屬性的方式,查看上述配置文件中是否存在該屬性的關聯(lián)對象的關聯(lián)屬性??梢岳斫獾氖牵涍^解析,目標對象teacher的更新屬性name觸發(fā)級聯(lián)更新,目標對象teacher的更新屬性coursename同樣觸發(fā)級聯(lián)更新。

遍歷上述配置文件,判斷是否存在與上述更新屬性相關聯(lián)的觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性;若存在與上述更新屬性相關聯(lián)的觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性,則上述更新屬性觸發(fā)級聯(lián)更新。

若上述更新屬性觸發(fā)級聯(lián)更新,則執(zhí)行步驟204;若上述更新屬性沒有觸發(fā)級聯(lián)更新,即上述非關系型數據中沒有其它關聯(lián)對象需要更新,僅需要更新目標對象。

步驟204:若所述更新屬性觸發(fā)級聯(lián)更新,則根據各觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的賦值方式,以及所述更新值,確定各所述觸發(fā)關聯(lián)屬性的賦值。

在本發(fā)明實施例中,若上述更新屬性觸發(fā)級聯(lián)更新,則根據各觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的賦值方式,以及上述更新值,確定各上述觸發(fā)關聯(lián)屬性的賦值。在本發(fā)明實施例的一種實施方式中,參照上述表1或者表2所示的非關系型數據庫,目標對象的teacher的更新屬性name觸發(fā)級聯(lián)更新,則根據觸發(fā)關聯(lián)對象student的觸發(fā)關聯(lián)屬性teachername的賦值方式student.teachername=teacher.name,以及所述teacher.name更新值b,確定該觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性student.teachername的更新值為b;同理確定teacher.coursename的觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性student.coursename的更新值為2。

步驟205:根據所述目標對象的更新屬性的更新值,以及各所述觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的賦值,更新所述非關系型數據庫。

在本發(fā)明實施例中,根據上述目標對象的更新屬性的更新值,以及各上述觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的賦值,更新上述非關系型數據庫。

舉例說明,對一非關系型數據庫,已經獲知目標對象的更新屬性teacher.name更新值b,其觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性student.teachername更新值b;teacher.coursename更新值2,其觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性student.coursename更新值2。更新上述非關系型數據庫,可以通過獲取對象teacher和對象student的所有屬性信息,在上述所有屬性信息中更新上述更新值,再將經過更新的對象teacher和對象student的所有屬性信息寫入非關系型數據庫中,上述的更新方式適用于所有非關系型數據庫,尤其是類似表1這樣的鍵值對型數據庫,因為其中value存儲的是對應于對象(鍵值)的整體數據,只能整體更新。

而對于非鍵值對型的非關系型數據庫而言,例如類似表2這樣的列存儲型數據庫,則可以只更新teacher.name、teacher.coursename這樣的目標對象的更新屬性,以及student.teachername、student.coursename這樣的觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性,而不需要更新其它屬性。

本發(fā)明實施例中,針對非關系型數據庫中目標對象的更新屬性的更新值,加載預先建立的針對目標對象的配置文件,通過解析上述配置文件中目標對象屬性與關聯(lián)對象屬性之間的關聯(lián)關系,確定觸發(fā)級聯(lián)更新的觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的賦值,然后更新上述非關系型數據庫;彌補了非關系型數據庫在關聯(lián)關系方面的弱點,能夠低成本地完成對非關系型數據庫關聯(lián)數據的更新,且不易出錯;預先建立的配置文件配置的是數據之間的關聯(lián)關系,簡單清晰,極易擴展,經過簡單代碼開發(fā)就可用于離線數據校驗等其他與關聯(lián)關系相關的工作;當關聯(lián)關系需要變更時,不需要修改代碼,只需要修改配置文件即可,節(jié)省開發(fā)時間;本發(fā)明實施例的技術方案簡單易用,具有通用性。

實施例二:

在本發(fā)明實施例中,針對非關系型數據庫中的對象,預先建立針對各對象的xml配置文件,通過預置的ognl表達式描述各關聯(lián)屬性的賦值方式。

以自定義xml文件的方式設置對象之間的關聯(lián)關系,在配置文件中聲明關聯(lián)關系的具體細節(jié):如目標對象,會觸發(fā)關聯(lián)關系的目標對象屬性,對應的關聯(lián)對象,以及關聯(lián)對象的關聯(lián)屬性賦值方式等,定義格式如下:

對以上xml文件解釋如下:

1)entity標簽:對象類型的聲明標簽,type屬性指定對象類型;

2)cascade標簽:關聯(lián)關系標簽,一個cascade聲明一種關聯(lián)關系,一個對象可以有多種關聯(lián)關系,所以一個entity中可以包含多個cascade。如對象a通過屬性x與對象b的屬性y有關聯(lián)關系,同時,a通過屬性a與對象c的屬性z也有關聯(lián)關系,那么entitya中就會包含兩個cascade,分別對應a.x<—>b.y和a.a<—>c.z的關聯(lián)關系;

3)src-field標簽:聲明會觸發(fā)關聯(lián)關系的屬性,該屬性屬于對象,用complex標記該屬性的類型,屬性可以是簡單類型也可以是復合類型,如果是復合類型,complex標記為true;type標明該屬性的對象類型(面向對象語言中的class),通過反射的方式,根據對象類型即可生成對象;src-field的值即為該屬性在對象中的屬性名稱;

4)target標簽:關聯(lián)對象類型的聲明標簽,type指定關聯(lián)對象的類型,id標明如何為關聯(lián)對象的id賦值;

5)complex-value/single-value標簽:復合類型/簡單類型數據標簽,復合類型是由簡單類型組成的,name屬性標明在關聯(lián)對象中的屬性名稱,標簽值為指定屬性值;type屬性標明該屬性的對象類型,通過反射的方式生成對象;from-db屬性用于指定:當無法從此次寫入的對象中獲取標簽值的話,是否可從數據庫中已有的對象中獲取。

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

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

ognl是一種表達式語言,通過簡單一致的表達式語法,可以存取對象的任意屬性,調用對象的方法,遍歷整個對象的結構圖,實現(xiàn)屬性類型轉換等功能。在本發(fā)明中,利用ognl,可實現(xiàn)讀取對象的屬性值和設置目標對象的屬性值,只要將xml標簽的值以ognl的語法書寫即可。即非關系型數據庫中的屬性值(屬性的賦值或者更新值),采用字符串的形式,或者在xml文件中采用字符串的形式對屬性值進行轉換即可;

使用方法是:

1)將目標對象以特定key存到ognl的上下文中;

2)按target標簽的type屬性值,使用反射的方式生成目標對象的關聯(lián)對象,并將其以特定的key存入ognl上下文中;

3)依次處理complex-value/single-value標簽,將標簽值(一個用ognl語法表達的字符串)代入目標對象key的ognl表達式中,所獲取的值,即為目標對象的關聯(lián)對象的屬性值,然后根據標簽中的name屬性值(也是用ognl語法表達的字符串),代入目標關聯(lián)對象key的ognl表達式中,實現(xiàn)將屬性值賦給目標對象的關聯(lián)對象的關聯(lián)屬性的目的。

xml配置文件中的ognl表達式如下示例:<single-valuename=”field1”>fielda.fieldb</single-value>。single-value的標簽值fielda.fieldb表示目標對象中的復合數據類型fielda中的簡單數據類型fieldb的值;name屬性值field1表示目標對象的關聯(lián)對象中名字為field1的屬性;整個一行配置的意思是:將目標對象的屬性fielda.fieldb的值賦給目標對象的關聯(lián)對象的關聯(lián)屬性field1。

參照圖3所示,本發(fā)明實施例提供了一種非關系型數據庫關聯(lián)數據的更新方法,可以包括步驟301-307:

步驟301:接收非關系型數據庫的更新信息;所述更新信息包括對應于所述更新信息的目標對象的更新屬性的更新值。

步驟302:加載預先建立的對應于所述目標對象的配置文件;所述配置文件包括所述目標對象的各關聯(lián)對象的各關聯(lián)屬性、所述各關聯(lián)屬性的賦值方式;所述配置文件為可擴展標記語言xml配置文件,通過預置的對象圖導航語言ognl表達式描述所述各關聯(lián)屬性的賦值方式。

在本發(fā)明實施例的一種實施方式中,上述配置文件可以為xml配置文件,而且通過ognl語言能夠訪問對象及其關聯(lián)對象的屬性的特性,在xml配置文件中采用ognl表達式描述上述各關聯(lián)屬性的賦值方式。

步驟303:解析所述配置文件,判斷所述更新屬性是否觸發(fā)級聯(lián)更新。

若上述更新屬性觸發(fā)級聯(lián)更新,則執(zhí)行步驟305;若上述更新屬性未觸發(fā)級聯(lián)更新,則執(zhí)行步驟304。例如,可以通過字符串過濾的方式,針對上述更新屬性,對上述配置文件進行解析;也可以通過針對于配置文件的模板,進行針對性的解析,還可以通過其他方式。

步驟304:若所述更新屬性沒有觸發(fā)級聯(lián)更新,則根據所述目標對象的更新屬性的更新值,更新所述非關系型數據庫。

若上述更新屬性沒有觸發(fā)級聯(lián)更新,則根據上述目標對象的更新屬性的更新值,更新上述非關系型數據庫。值得說明的是,因為非關系型數據庫有多種不同的類型,面對不同類型的非關系型數據庫,更新方式也不一樣。例如,對于鍵值對數據庫進行更新時,是以對象(鍵值)為單位的,即欲更新某一對象的某個屬性,則需要同時對該對象的所有屬性進行寫入。

步驟305:若所述更新屬性觸發(fā)級聯(lián)更新,則確定所述xml配置文件中各觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性。

在本發(fā)明實施例中,若上述更新屬性觸發(fā)級聯(lián)更新,則確定上述xml配置文件中各觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性。在下面的例子中,進一步詳細說明。

步驟306:根據所述各觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的ognl表達式,以及所述更新值,確定所述觸發(fā)關聯(lián)屬性的賦值。

在本發(fā)明實施例中,根據上述各觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的ognl表達式,以及上述更新值,確定上述觸發(fā)關聯(lián)屬性的賦值,在下面的例子中,可以進一步詳細說明。

步驟307:根據所述目標對象的更新屬性的更新值,以及各所述觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的賦值,更新所述非關系型數據庫。

優(yōu)選地,所述步驟307,可以包括:

查詢所述非關系型數據庫,獲取所述目標對象與所述各觸發(fā)關聯(lián)對象的屬性信息并保存;根據所述目標對象的更新屬性的更新值,以及各所述觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的賦值,更新保存的所述目標對象與所述各觸發(fā)關聯(lián)對象的屬性信息;將保存的所述目標對象與所述各觸發(fā)關聯(lián)對象的屬性信息,作為整體,對所述非關系型數據庫執(zhí)行整體寫入操作。

可以理解的是,上述獲取上述目標對象與上述各觸發(fā)關聯(lián)對象的屬性信息并保存的步驟只要在對上述目標對象與上述各觸發(fā)關聯(lián)對象進行更新之前執(zhí)行即可;還可以選擇在上述步驟306之前執(zhí)行,使得在執(zhí)行步驟306之后,即在確定上述觸發(fā)關聯(lián)屬性的賦值之后,即可直接更新保存的上述目標對象與上述各觸發(fā)關聯(lián)對象。

優(yōu)選地,所述非關系型數據庫為非鍵值對數據庫時,所述步驟307,可以包括:

將所述目標對象的更新屬性的更新值,以及各所述觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的賦值,作為整體,對所述非關系型數據庫執(zhí)行整體寫入操作;接收所述非關系型數據庫,針對所述整體寫入操作的響應;根據所述響應,判斷所述整體寫入操作是否執(zhí)行成功;若所述整體寫入操作未執(zhí)行成功,則繼續(xù)對所述非關系型數據庫執(zhí)行所述整體寫入操作。

優(yōu)選地,通過修改所述目標對象的配置文件,或者增加所述非關系型數據庫中對象的配置文件,對所述非關系型數據庫中各對象的關聯(lián)關系進行修改或添加。如此,可以方便的對目標對象的關聯(lián)關系進行更新,或者對其它對象建立包含關聯(lián)關系的配置文件。

下面結合具體例子,對上述步驟301-307,作進一步詳細的說明。

例如,一非關系型數據庫中存在有學生表和教師表,分別用student和teacher表示這兩個對象。對象student會存儲關聯(lián)teacher的一些信息,對象teacher也會存儲其教授的student的信息,例如下面定義的實體:

試想一種情況,當修改teacher.metadata,修改了教師的名字或者其教授的課程;由于student.teacherinfo中也存儲了該教師的名字和授課名稱,所以需要同步的修改,即可使用本發(fā)明實施例的技術方案。

以列存儲型數據庫的更新為例,因為列存儲型數據庫可以只更新關心的列,而不用更新整個對象,基本步驟如下:

1.接收一條更新消息message1,更新teacher.metadata,修改了教師的名字和其教授的課程名稱;

2.根據message1.id查詢上述非關系型數據庫中已存在的該實體對象message_exist,因為如本例中的情況,級聯(lián)關系屬性studentinfo可能不在本次修改的message1中,但確實metadata屬性會觸發(fā)級聯(lián)關系,所以需要從message_exist中的studentinfo中獲取級聯(lián)的student信息;message_exist會在步驟5中使用;

3.根據目標對象的類型teacher查詢到定義的xml配置文件;

4.用xml配置文件檢查更新消息message1中的字段,檢查是否會觸發(fā)級聯(lián)更新,在本例中,屬性teacher.metadata的修改會觸發(fā)級聯(lián)更新,進入步驟5;

5.配置文件中會指明級聯(lián)關系的賦值方式,在本例中,就是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作為一個整體一起提交給數據庫,如有一條失敗,即可返回失敗,則需要重新寫入,以保證級聯(lián)關系的一致性。

下面以鍵值對(key-value)非關系型數據庫的更新為例,仍然針對上述定義實體,由于key-value數據庫中的value存儲的是message整體,更新時需要首先獲取數據庫中的原始message,更新某些屬性后,再整體重新寫回數據庫,基本步驟如下:

1.接收一條更新消息message1,更新teacher.metadata,修改了教師的名字和其教授的課程名稱;

2.根據更新實體的類型teacher查詢到定義的xml配置文件;

3.用xml配置文件檢查更新消息message1中的字段,檢查是否會觸發(fā)級聯(lián)更新,在本例中,teacher.metadata的修改會觸發(fā)級聯(lián)更新,進入步驟4;

4.根據student.id查詢數據庫,獲取已存的student原始message2;

5.配置文件中會指明級聯(lián)關系的賦值方式,在本例中,就是teacher.metadata和student.teacherinfo之間的賦值方式,如將teacher.metadata.name賦值給student.teacherinfo.name等。通過程序代碼,遍歷xml的配置項可完成賦值操作。賦值操作在步驟4獲取的原始數據message2上執(zhí)行即可,即更新message2中的部分字段值。

6.如果teacher包括多個studentinfo,那么通過步驟4就會生成多條student的更新消息,即message2,message3……messagen,將它們與message1作為一個整體一起寫入給數據庫即可。

針對上述采用ognl表達式的賦值方式,舉例如下:

//ognl模板方法如下:

ognlcontextcontext=newonglcontext();

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

//通過如下ognl的語法,即可實現(xiàn)對student.teacherinfo.name的賦值

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

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

執(zhí)行完所有的xml配置項后,只要把ognlcontext中的cascadeobject取出,就是生成的message2。

本發(fā)明實施例中,針對非關系型數據庫中目標對象的更新屬性的更新值,加載預先建立的針對目標對象的xml配置文件,通過解析上述配置文件中目標對象屬性與關聯(lián)對象屬性之間的關聯(lián)關系,通過ognl表達式確定觸發(fā)級聯(lián)更新的觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的賦值,然后更新上述非關系型數據庫;彌補了非關系型數據庫在關聯(lián)關系方面的弱點,能夠低成本地完成對非關系型數據庫關聯(lián)數據的更新,且不易出錯;預先建立的xml配置文件結合ognl表達式,配置的是數據之間的關聯(lián)關系,使得對象的訪問方式變得極其簡單和統(tǒng)一,關聯(lián)關系簡單清晰,極易擴展,經過簡單代碼開發(fā)就可用于離線數據校驗等其他與關聯(lián)關系相關的工作;當關聯(lián)關系需要變更時,不需要修改代碼,只需要修改配置文件即可,節(jié)省開發(fā)時間;本發(fā)明實施例的技術方案簡單易用,具有通用性。

本發(fā)明實施例的優(yōu)選方式中,將上述目標對象與上述各觸發(fā)關聯(lián)對象的屬性信息,作為整體寫入上述非關系型數據庫,具有通用性,同時保證了關聯(lián)數據更新的一致性。

本發(fā)明實施例的優(yōu)選方式中,對于非鍵值對型非關系型數據庫,僅更新上述目標對象的更新屬性與上述各觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性,可以減小處理負擔,提升更新效率。

本發(fā)明實施例的優(yōu)選方式中,修改上述目標對象的配置文件,或者增加上述非關系型數據庫中對象的配置文件,可以方便的對目標對象的關聯(lián)關系進行更新,或者對其它對象建立包含關聯(lián)關系的配置文件,便于關聯(lián)關系的擴展與維護。

需要說明的是,對于方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領域技術人員應該知悉,本發(fā)明實施例并不受所描述的動作順序的限制,因為依據本發(fā)明實施例,某些步驟可以采用其他順序或者同時進行。其次,本領域技術人員也應該知悉,說明書中所描述的實施例均屬于優(yōu)選實施例,所涉及的動作并不一定是本發(fā)明實施例所必須的。

實施例三:

參照圖4所示,本發(fā)明實施例提供了一種非關系型數據庫關聯(lián)數據的更新系統(tǒng),可以包括:

更新消息接收模塊401,用于接收非關系型數據庫的更新信息;所述更新信息包括對應于所述更新信息的目標對象的更新屬性的更新值;

配置文件加載模塊402,用于加載預先建立的對應于所述目標對象的配置文件;所述配置文件包括所述目標對象的各關聯(lián)對象的各關聯(lián)屬性、所述各關聯(lián)屬性的賦值方式;

配置文件解析模塊403,用于解析所述配置文件,判斷所述更新屬性是否觸發(fā)級聯(lián)更新;

級聯(lián)更新觸發(fā)模塊404,用于若所述更新屬性觸發(fā)級聯(lián)更新,則根據各觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的賦值方式,以及所述更新值,確定各所述觸發(fā)關聯(lián)屬性的賦值;

第一數據庫更新模塊405,用于根據所述目標對象的更新屬性的更新值,以及各所述觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的賦值,更新所述非關系型數據庫。

本發(fā)明實施例中,針對非關系型數據庫中目標對象的更新屬性的更新值,加載預先建立的針對目標對象的配置文件,通過解析上述配置文件中目標對象屬性與關聯(lián)對象屬性之間的關聯(lián)關系,確定觸發(fā)級聯(lián)更新的觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的賦值,然后更新上述非關系型數據庫;彌補了非關系型數據庫在關聯(lián)關系方面的弱點,能夠低成本地完成對非關系型數據庫關聯(lián)數據的更新,且不易出錯;預先建立的配置文件配置的是數據之間的關聯(lián)關系,簡單清晰,極易擴展,經過簡單代碼開發(fā)就可用于離線數據校驗等其他與關聯(lián)關系相關的工作;當關聯(lián)關系需要變更時,不需要修改代碼,只需要修改配置文件即可,節(jié)省開發(fā)時間;本發(fā)明實施例的技術方案簡單易用,具有通用性。

實施例四:

參照圖5所示,本發(fā)明實施例提供了一種非關系型數據庫關聯(lián)數據的更新系統(tǒng),可以包括:

更新消息接收模塊401,用于接收非關系型數據庫的更新信息;所述更新信息包括對應于所述更新信息的目標對象的更新屬性的更新值;

配置文件加載模塊402,用于加載預先建立的對應于所述目標對象的配置文件;所述配置文件包括所述目標對象的各關聯(lián)對象的各關聯(lián)屬性、所述各關聯(lián)屬性的賦值方式;

所述配置文件為可擴展標記語言xml配置文件,通過預置的對象圖導航語言ognl表達式描述所述各關聯(lián)屬性的賦值方式;

配置文件解析模塊403,用于解析所述配置文件,判斷所述更新屬性是否觸發(fā)級聯(lián)更新;

第二數據庫更新模塊406,用于若所述更新屬性沒有觸發(fā)級聯(lián)更新,則根據所述目標對象的更新屬性的更新值,更新所述非關系型數據庫;

xml觸發(fā)確認模塊40401,用于若所述更新屬性觸發(fā)級聯(lián)更新,則確定所述xml配置文件中各觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性;

ognl賦值模塊40402,用于根據所述各觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的ognl表達式,以及所述更新值,確定所述觸發(fā)關聯(lián)屬性的賦值;

第一數據庫更新模塊405,用于根據所述目標對象的更新屬性的更新值,以及各所述觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的賦值,更新所述非關系型數據庫。

優(yōu)選地,所述第一數據庫更新模塊405,可以包括:

對象數據保存模塊,用于查詢所述非關系型數據庫,獲取所述目標對象與所述各觸發(fā)關聯(lián)對象的屬性信息并保存;

對象數據更新模塊,用于根據所述目標對象的更新屬性的更新值,以及各所述觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的賦值,更新保存的所述目標對象與所述各觸發(fā)關聯(lián)對象的屬性信息;

對象數據寫入模塊,用于將保存的所述目標對象與所述各觸發(fā)關聯(lián)對象的屬性信息,作為整體,對所述非關系型數據庫執(zhí)行整體寫入操作。

優(yōu)選地,所述非關系型數據庫為非鍵值對數據庫時,所述第一數據庫更新模塊405,可以包括:

整體寫入模塊,用于將所述目標對象的更新屬性的更新值,以及各所述觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的賦值,作為整體,對所述非關系型數據庫執(zhí)行整體寫入操作;

響應接收模塊,用于接收所述非關系型數據庫,針對所述整體寫入操作的響應;

寫入判斷模塊,用于根據所述響應,判斷所述整體寫入操作是否執(zhí)行成功;

繼續(xù)寫入模塊,用于若所述整體寫入操作未執(zhí)行成功,則繼續(xù)對所述非關系型數據庫執(zhí)行所述整體寫入操作。

優(yōu)選地,所述系統(tǒng)還可以包括:

配置文件更新模塊,用于通過修改所述目標對象的配置文件,或者增加所述非關系型數據庫中對象的配置文件,對所述非關系型數據庫中各對象的關聯(lián)關系進行修改或添加。

本發(fā)明實施例中,針對非關系型數據庫中目標對象的更新屬性的更新值,加載預先建立的針對目標對象的xml配置文件,通過解析上述配置文件中目標對象屬性與關聯(lián)對象屬性之間的關聯(lián)關系,通過ognl表達式確定觸發(fā)級聯(lián)更新的觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性的賦值,然后更新上述非關系型數據庫;彌補了非關系型數據庫在關聯(lián)關系方面的弱點,能夠低成本地完成對非關系型數據庫關聯(lián)數據的更新,且不易出錯;預先建立的xml配置文件結合ognl表達式,配置的是數據之間的關聯(lián)關系,使得對象的訪問方式變得極其簡單和統(tǒng)一,關聯(lián)關系簡單清晰,極易擴展,經過簡單代碼開發(fā)就可用于離線數據校驗等其他與關聯(lián)關系相關的工作;當關聯(lián)關系需要變更時,不需要修改代碼,只需要修改配置文件即可,節(jié)省開發(fā)時間;本發(fā)明實施例的技術方案簡單易用,具有通用性。

本發(fā)明實施例的優(yōu)選方式中,將上述目標對象與上述各觸發(fā)關聯(lián)對象的屬性信息,作為整體寫入上述非關系型數據庫,具有通用性,同時保證了關聯(lián)數據更新的一致性。

本發(fā)明實施例的優(yōu)選方式中,對于非鍵值對型非關系型數據庫,僅更新上述目標對象的更新屬性與上述各觸發(fā)關聯(lián)對象的觸發(fā)關聯(lián)屬性,可以減小處理負擔,提升更新效率。

本發(fā)明實施例的優(yōu)選方式中,修改上述目標對象的配置文件,或者增加上述非關系型數據庫中對象的配置文件,可以方便的對目標對象的關聯(lián)關系進行更新,或者對其它對象建立包含關聯(lián)關系的配置文件,便于關聯(lián)關系的擴展與維護。

對于裝置實施例而言,由于其與方法實施例基本相似,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。

本說明書中的各個實施例均采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。

本領域內的技術人員應明白,本發(fā)明實施例的實施例可提供為方法、裝置、或計算機程序產品。因此,本發(fā)明實施例可采用完全硬件實施例、完全軟件實施例、或結合軟件和硬件方面的實施例的形式。而且,本發(fā)明實施例可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限于磁盤存儲器、cd-rom、光學存儲器等)上實施的計算機程序產品的形式。

本發(fā)明實施例是參照根據本發(fā)明實施例的方法、終端設備(系統(tǒng))、和計算機程序產品的流程圖和/或方框圖來描述的。應理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結合。可提供這些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數據處理終端設備的處理器以產生一個機器,使得通過計算機或其他可編程數據處理終端設備的處理器執(zhí)行的指令產生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。

這些計算機程序指令也可存儲在能引導計算機或其他可編程數據處理終端設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。

這些計算機程序指令也可裝載到計算機或其他可編程數據處理終端設備上,使得在計算機或其他可編程終端設備上執(zhí)行一系列操作步驟以產生計算機實現(xiàn)的處理,從而在計算機或其他可編程終端設備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。

盡管已描述了本發(fā)明實施例的優(yōu)選實施例,但本領域內的技術人員一旦得知了基本創(chuàng)造性概念,則可對這些實施例做出另外的變更和修改。所以,所附權利要求意欲解釋為包括優(yōu)選實施例以及落入本發(fā)明實施例范圍的所有變更和修改。

最后,還需要說明的是,在本文中,諸如第一和第二等之類的關系術語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關系或者順序。而且,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者終端設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者終端設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者終端設備中還存在另外的相同要素。

以上對本發(fā)明所提供的一種非關系型數據庫關聯(lián)數據的更新方法及系統(tǒng),進行了詳細介紹,本文中應用了具體個例對本發(fā)明的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時,對于本領域的一般技術人員,依據本發(fā)明的思想,在具體實施方式及應用范圍上均會有改變之處,綜上所述,本說明書內容不應理解為對本發(fā)明的限制。

當前第1頁1 2 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
华阴市| 汪清县| 宁远县| 潮安县| 巢湖市| 嘉峪关市| 舟山市| 监利县| 翁源县| 泰宁县| 枣强县| 水城县| 三江| 阳西县| 襄垣县| 昭觉县| 沙湾县| 沾化县| 龙州县| 江安县| 平遥县| 海城市| 乐昌市| 汝城县| 江北区| 杨浦区| 梧州市| 东光县| 丹棱县| 钦州市| 海阳市| 姜堰市| 石柱| 云和县| 沂源县| 上犹县| 上犹县| 江源县| 蓬莱市| 张家口市| 壤塘县|