亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種網(wǎng)站更新實(shí)時(shí)發(fā)布的方法及系統(tǒng)的制作方法

文檔序號(hào):6472175閱讀:257來源:國知局

專利名稱::一種網(wǎng)站更新實(shí)時(shí)發(fā)布的方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域
:本發(fā)明屬于電子信息
技術(shù)領(lǐng)域
,具體涉及一種底層數(shù)據(jù)的變化引發(fā)頁面實(shí)時(shí)更新的方法及系統(tǒng)。
背景技術(shù)
:在信息技術(shù)日趨向網(wǎng)絡(luò)化發(fā)展的今天,越來越多的網(wǎng)站(尤其是門戶網(wǎng)站)要求能將具有實(shí)時(shí)性的信息(新聞)自動(dòng)快速的在網(wǎng)站上展現(xiàn)出來。將編輯簽發(fā)的重要稿件、記者撰寫的熱點(diǎn)新聞盡快的發(fā)布到網(wǎng)站上,不論對(duì)網(wǎng)絡(luò)受眾還是網(wǎng)站運(yùn)營者本身都有著重要意義。而實(shí)現(xiàn)編輯、發(fā)布全自動(dòng)的流程就顯得尤為重要?,F(xiàn)有網(wǎng)站大多都采取B/S(瀏覽器/服務(wù)器)模式,在這種模式下頁面生成一般有兩種方案(1)采用動(dòng)態(tài)頁面的方式,即一個(gè)網(wǎng)絡(luò)讀者通過瀏覽器點(diǎn)擊網(wǎng)站的一個(gè)鏈接,瀏覽器會(huì)向網(wǎng)站的Web服務(wù)器發(fā)起一個(gè)請(qǐng)求,網(wǎng)站的Web服務(wù)器接受請(qǐng)求,查詢網(wǎng)站后臺(tái)數(shù)據(jù)庫,對(duì)數(shù)據(jù)進(jìn)行組織后返回給瀏覽器端一個(gè)結(jié)果頁面。這種方式保證了瀏覽器端的讀者每次點(diǎn)擊所看到的信息都是即時(shí)的,其瓶頸在于后臺(tái)數(shù)據(jù)庫的負(fù)載能力。在網(wǎng)站并發(fā)訪問高峰時(shí),Web服務(wù)器需要大量且頻繁的查詢數(shù)據(jù)庫,往往會(huì)由于數(shù)據(jù)庫響應(yīng)緩慢而造成網(wǎng)站的響應(yīng)延時(shí)或無法響應(yīng)?,F(xiàn)時(shí)這種方案已經(jīng)被越來越多的網(wǎng)站所摒棄。(2)采用靜態(tài)頁面的方式,即網(wǎng)站預(yù)先生成所有的結(jié)果頁面。此時(shí)對(duì)于瀏覽器端讀者的一個(gè)請(qǐng)求,web服務(wù)器不需要查詢數(shù)據(jù)庫,返回的是早已生成的頁面。這種方式的瓶頸不再是數(shù)據(jù)庫的負(fù)載能力,而是網(wǎng)站可支持高速、并發(fā)的訪問架構(gòu)。這點(diǎn)可以通過web服務(wù)器后端關(guān)聯(lián)的頁面緩存服務(wù)器,及web服務(wù)器本身集群來解決?,F(xiàn)在越來越多的網(wǎng)站采用了這種方式。本發(fā)明的內(nèi)容也是針對(duì)這種方式。這種方式要注意的是如果數(shù)據(jù)庫中的數(shù)據(jù)發(fā)生了變化,網(wǎng)站就需要將這些數(shù)據(jù)相關(guān)的所有結(jié)果頁面重新生成。保證在讀者訪問時(shí),網(wǎng)站返回的始終是包含最新數(shù)據(jù)的結(jié)果頁面。那么自然引入了兩個(gè)問題怎樣才能及時(shí)得知哪些數(shù)據(jù)發(fā)生了變化?怎樣才能判斷出需要更新哪些結(jié)果頁面?這也是本發(fā)明所要解決的問題。
發(fā)明內(nèi)容本發(fā)明的目的是在不改變網(wǎng)站內(nèi)部原有生產(chǎn)流程的基礎(chǔ)上,對(duì)生產(chǎn)流程中改變的數(shù)據(jù)進(jìn)行捕捉,判斷這些改變的數(shù)據(jù)需要更新哪些頁面,進(jìn)而產(chǎn)生更新頁面的消息,從而實(shí)現(xiàn)無需人工干預(yù)的全自動(dòng)頁面更新流程。為達(dá)到以上目的,本發(fā)明采用的技術(shù)方案是一種底層數(shù)據(jù)的變化引發(fā)頁面實(shí)時(shí)更新的解決方案,包括以下模塊數(shù)據(jù)表配置模塊,用于配置數(shù)據(jù)庫中的數(shù)據(jù)表,并針對(duì)數(shù)據(jù)表中的數(shù)據(jù)變更設(shè)置觸發(fā)器;內(nèi)存數(shù)據(jù)庫模塊,用于緩存數(shù)據(jù)庫表中的部分?jǐn)?shù)據(jù)及計(jì)算結(jié)果,并進(jìn)行備份;數(shù)據(jù)變更處理模塊,用于獲取變更數(shù)據(jù),并將所述數(shù)據(jù)與內(nèi)存數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行比對(duì)計(jì)算,判斷是否需要進(jìn)行更新,如果需要更新,則向發(fā)布消息生成模塊提交消息隊(duì)列;發(fā)布消息生成模塊,用于將消息隊(duì)列中的消息組織成網(wǎng)站實(shí)際發(fā)布程序所需的消息格式,以實(shí)現(xiàn)頁面發(fā)布。進(jìn)一步的,還包括發(fā)布模塊,所述發(fā)布模塊根據(jù)發(fā)布消息生成模塊傳來的發(fā)布消息,將更新后的數(shù)據(jù)在網(wǎng)站上進(jìn)行發(fā)布。進(jìn)一步的,所述數(shù)據(jù)表配置模塊除包括用于存放各種數(shù)據(jù)的數(shù)據(jù)表外,還包括為所選數(shù)據(jù)表創(chuàng)建的數(shù)據(jù)副表,所述副表的表結(jié)構(gòu)與數(shù)據(jù)表一致,還包括三列,分別用于標(biāo)志處理開始時(shí)間、標(biāo)志處理完成時(shí)間以及標(biāo)志操作類型;觸發(fā)器,在實(shí)際數(shù)據(jù)庫中為所選數(shù)據(jù)表而建立,所述觸發(fā)器建立在每張數(shù)據(jù)表上,并實(shí)時(shí)對(duì)數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行監(jiān)控;配置文件,存放數(shù)據(jù)表、數(shù)據(jù)副表相關(guān)數(shù)據(jù)字典的信息。進(jìn)一步的,所述觸發(fā)器監(jiān)控?cái)?shù)據(jù)表上的Insert(插入)、Update(更新)、Delete(刪除)操作,當(dāng)有上述操作時(shí),觸發(fā)器將操作涉及到的數(shù)據(jù)表上的記錄寫入對(duì)應(yīng)的數(shù)據(jù)副表,并標(biāo)志相應(yīng)的操作類型,通知數(shù)據(jù)變更處理模塊哪些數(shù)據(jù)副表中有新記錄。進(jìn)一步的,所述內(nèi)存數(shù)據(jù)庫模塊具體包括數(shù)據(jù)初始化子模塊在系統(tǒng)初始化時(shí)運(yùn)行,負(fù)責(zé)為內(nèi)存數(shù)據(jù)庫建立緩存結(jié)構(gòu)即內(nèi)存數(shù)據(jù)表,同時(shí)從實(shí)際數(shù)據(jù)庫中加載所需數(shù)據(jù)到內(nèi)存數(shù)據(jù)表中,初始化過程中還需要對(duì)網(wǎng)站系統(tǒng)中涉及到的每個(gè)模板文件進(jìn)行解析,從中提取組件信息并計(jì)算組件結(jié)果,將其記錄到內(nèi)存數(shù)據(jù)表中;數(shù)據(jù)同步子模塊為內(nèi)存數(shù)據(jù)庫的備份恢復(fù)提供支持,子模塊定期將內(nèi)存數(shù)據(jù)庫中數(shù)據(jù)表的數(shù)據(jù)備份到文件系統(tǒng),當(dāng)數(shù)據(jù)備份完成后,將所有數(shù)據(jù)副表中處理結(jié)束時(shí)間在備份時(shí)間前的記錄全部刪除;數(shù)據(jù)操作接口子模塊為數(shù)據(jù)變更處理模塊提供查詢及修改服務(wù)。進(jìn)一步的,所述數(shù)據(jù)變更處理模塊具體包括獲取通知子模塊,用于接受來自觸發(fā)器或內(nèi)存數(shù)據(jù)庫的通知,分析有哪些數(shù)據(jù)副表需要處理;頁面更新消息生成子模塊,根據(jù)每條記錄的類型,判斷這條記錄是否會(huì)產(chǎn)生發(fā)布消息,如果會(huì)則生成對(duì)應(yīng)的消息到消息隊(duì)列;消息隊(duì)列提交子模塊,用于向發(fā)布消息生成模塊提交所述消息隊(duì)列。進(jìn)一步的,還包括記錄讀取子模塊,對(duì)獲取通知子模塊中分析的數(shù)據(jù)副表,讀取上述數(shù)據(jù)副表中的所有待處理記錄,并標(biāo)志這些記錄的處理開始時(shí)間為當(dāng)前時(shí)間;記錄結(jié)束子模塊,對(duì)記錄讀取子模塊中讀取的所有記錄,在頁面更新消息生成子模塊處理后,標(biāo)志這些記錄的處理結(jié)束時(shí)間為當(dāng)前時(shí)間。進(jìn)一步的,所述頁面更新消息生成子模塊將記錄讀取子模塊中讀取的記錄按"欄目類型"、"模板類型"、"欄目模板類型"、"稿件類型"四種類型加以區(qū)分,每種類型下按增力口、6刪除、修改三種操作進(jìn)行處理分析,來判斷這條記錄是否會(huì)產(chǎn)生發(fā)布消息,如果會(huì)則生成對(duì)應(yīng)的消息加入消息隊(duì)列。此外,本發(fā)明還提供一種網(wǎng)站更新實(shí)時(shí)發(fā)布方法,包括以下步驟為數(shù)據(jù)表建立觸發(fā)器;實(shí)時(shí)監(jiān)控?cái)?shù)據(jù)表中的數(shù)據(jù),當(dāng)數(shù)據(jù)變更時(shí),進(jìn)行觸發(fā);判斷是否更新頁面;如更新,將更新消息傳送給網(wǎng)站發(fā)布程序,實(shí)現(xiàn)頁面發(fā)布。進(jìn)一步的,為數(shù)據(jù)表建立觸發(fā)器,具體操作為選擇網(wǎng)站數(shù)據(jù)庫中的數(shù)據(jù)表;為每個(gè)數(shù)據(jù)表創(chuàng)建相應(yīng)副表;為每個(gè)數(shù)據(jù)表創(chuàng)建觸發(fā)器。進(jìn)一步的,所述副表結(jié)構(gòu)與原數(shù)據(jù)表一致,且增加了三列,作用分別為標(biāo)志處理開始時(shí)間,標(biāo)志處理完成時(shí)間,標(biāo)志操作類型。進(jìn)一步的,所述操作類型包括插入、更新、刪除操作。進(jìn)一步的,觸發(fā)器的操作具體為所述觸發(fā)器監(jiān)控?cái)?shù)據(jù)表上的Insert(插入)、Update(更新)、Delete(刪除)操作,當(dāng)有上述操作時(shí),觸發(fā)器將操作涉及到的數(shù)據(jù)表上的記錄寫入對(duì)應(yīng)的數(shù)據(jù)副表,并標(biāo)志相應(yīng)的操作類型,然后通知數(shù)據(jù)變更處理模塊這個(gè)數(shù)據(jù)副表需要處理。進(jìn)一步的,所述數(shù)據(jù)表為網(wǎng)站基礎(chǔ)表,包括但不限于欄目表、模板表、稿件表、欄目-稿件關(guān)聯(lián)表、欄目_模板關(guān)聯(lián)表、發(fā)布規(guī)則表、欄目-發(fā)布規(guī)則關(guān)聯(lián)表。進(jìn)一步的,還包括緩存數(shù)據(jù)庫表中的部分?jǐn)?shù)據(jù)及計(jì)算結(jié)果,同時(shí)以定期將緩存中的數(shù)據(jù)備份到本地文件的方式保證數(shù)據(jù)的完整性。進(jìn)一步的,所述緩存的具體操作包括數(shù)據(jù)初始化,為內(nèi)存數(shù)據(jù)庫建立緩存結(jié)構(gòu)即內(nèi)存數(shù)據(jù)表,同時(shí)從實(shí)際數(shù)據(jù)庫中加載所需數(shù)據(jù)到內(nèi)存數(shù)據(jù)表中,對(duì)網(wǎng)站系統(tǒng)中涉及到的每個(gè)模板文件進(jìn)行解析,從中提取組件信息并計(jì)算組件結(jié)果,將其記錄到內(nèi)存數(shù)據(jù)表中;定期將內(nèi)存數(shù)據(jù)庫中數(shù)據(jù)表的數(shù)據(jù)備份到文件系統(tǒng),當(dāng)數(shù)據(jù)備份完成后,將所有數(shù)據(jù)副表中處理結(jié)束時(shí)間在備份時(shí)間前的記錄全部刪除,在內(nèi)存數(shù)據(jù)庫出現(xiàn)異常時(shí)重啟內(nèi)存數(shù)據(jù)庫時(shí),從文件系統(tǒng)恢復(fù)數(shù)據(jù),并對(duì)所有數(shù)據(jù)副表中的記錄,將其處理開始時(shí)間、處理結(jié)束時(shí)間置空,通知數(shù)據(jù)變更處理模塊有哪些數(shù)據(jù)副表還有待處理的記錄。進(jìn)一步的,還包括獲取由數(shù)據(jù)庫觸發(fā)器反饋的變更數(shù)據(jù),并將這種變更與內(nèi)存數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行比對(duì)計(jì)算的操作,進(jìn)而判斷此次更新是否需要更新頁面。進(jìn)一步的,判斷是否更新頁面的操作包括接受來自數(shù)據(jù)庫觸發(fā)器的變更請(qǐng)求;從該數(shù)據(jù)副表中讀取上述記錄;將上述記錄結(jié)合內(nèi)存數(shù)據(jù)庫模塊中的數(shù)據(jù)記錄進(jìn)行比對(duì)計(jì)算,將需要更新的信息組織成對(duì)應(yīng)的消息寫入消息隊(duì)列;向發(fā)布消息生成模塊提交消息隊(duì)列。進(jìn)一步的,還包括以下操作從該數(shù)據(jù)表中讀取上述記錄時(shí),將數(shù)據(jù)表中這些記錄的處理開始時(shí)間標(biāo)記為當(dāng)前時(shí)間;以及記錄處理完畢后,向數(shù)據(jù)庫標(biāo)記記錄的處理結(jié)束時(shí)間。進(jìn)一步的,所述比較的操作具體為將所述記錄按"欄目類型"、"模板類型"、"欄目模板類型"、"稿件類型"四種類型加以區(qū)分,每種類型下按增加、刪除、修改三種操作進(jìn)行處理分析,判斷這條記錄是否會(huì)產(chǎn)生發(fā)布消息,如果會(huì)則生成對(duì)應(yīng)的消息加入消息隊(duì)列。進(jìn)一步的,發(fā)布具體操作為對(duì)消息隊(duì)列中的每條消息,重新組織成網(wǎng)站實(shí)際發(fā)布程序可以理解的消息格式,傳送給發(fā)布程序,實(shí)現(xiàn)頁面發(fā)布。通過本發(fā)明所述的技術(shù)方案,能夠快速、高效、自動(dòng)的實(shí)現(xiàn)頁面更新流程。圖1是本發(fā)明預(yù)定義術(shù)語欄目稿件關(guān)系示意圖2是本發(fā)明舉例欄目發(fā)布的頁面示意圖3是本發(fā)明系統(tǒng)結(jié)構(gòu)圖4是本發(fā)明實(shí)現(xiàn)方法示意圖。具體實(shí)施例方式下面結(jié)合附圖對(duì)本發(fā)明的實(shí)現(xiàn)方案做進(jìn)一步闡述。為了便于對(duì)本發(fā)明技術(shù)方案的理解,對(duì)實(shí)施例中提到的術(shù)語進(jìn)行如下解釋術(shù)語解釋欄目網(wǎng)站的組織結(jié)構(gòu)單位,一個(gè)網(wǎng)站在系統(tǒng)內(nèi)部可以定義多個(gè)欄目(如網(wǎng)站的首頁在系統(tǒng)內(nèi)部就對(duì)應(yīng)一個(gè)欄目),欄目間可以存在父子關(guān)系(網(wǎng)站的結(jié)構(gòu)即為一棵欄目樹)模板一個(gè)模板就是一個(gè)文件,其內(nèi)容為html代碼。模板分欄目模板和稿件模板兩類。欄目模板設(shè)定欄目發(fā)布頁的樣式,稿件模板設(shè)定一篇稿件發(fā)布頁的樣式。組件DreamWeaver(DW)的插件,用DW制作模板時(shí),可以象在模板中插入html標(biāo)簽一樣插入一個(gè)組件。組件提供可視化的編輯界面,同時(shí)在組件中可以直接嵌入html代碼或者普通文本。組件最終以注釋的形式保存在模板文件中。8術(shù)語解釋稿件數(shù)據(jù)單元。一篇稿件擁有標(biāo)題、正文、作者、來源、鏈接等多個(gè)屬性,可以附帶多個(gè)素材(圖片/音視頻)。一個(gè)欄目下可以有多篇稿件。發(fā)布規(guī)則欄目有自己的發(fā)布規(guī)則,這個(gè)規(guī)則指明了欄目頁面/欄目下稿件頁面/模板關(guān)聯(lián)文件/素材文件在磁盤上的存放位置。在實(shí)際網(wǎng)站的場(chǎng)景中,編輯會(huì)隨時(shí)為一個(gè)欄目增加、刪除、修改一篇稿件;系統(tǒng)管理員會(huì)增加、刪除、修改一個(gè)欄目,或?yàn)闄谀啃录幽0寤蛑匦玛P(guān)聯(lián)模板;美工會(huì)新上傳一套模板,或上傳一套模板替換現(xiàn)有的模板等操作。本發(fā)明以下部分描述依賴于前面預(yù)定義的"術(shù)語",對(duì)于"模板"、"組件"、"欄目"、"稿件"等術(shù)語間的關(guān)系可參見附圖l(預(yù)定義術(shù)語說明圖)欄目"國內(nèi)報(bào)刊"下有三個(gè)子欄目"推薦報(bào)刊"、"關(guān)注單元"、"其他報(bào)刊",子欄目"推薦報(bào)刊"中管理的是編輯推薦的熱點(diǎn)報(bào)刊;"關(guān)注單元"、"其他報(bào)刊"管理關(guān)注的報(bào)刊及普通報(bào)刊。欄目"國內(nèi)報(bào)刊"關(guān)聯(lián)了欄目模板,這個(gè)模板中設(shè)了三個(gè)組件,分別指向"推薦報(bào)刊"、"關(guān)注單元"、"其他報(bào)刊",并且每個(gè)組件都設(shè)定了查詢條件(顯示欄目下的哪些稿件,比如組件B只顯示"關(guān)注單元"欄目下的頭兩篇稿件),以及一些html代碼(設(shè)定組件的顯示樣式)。模板最終確定了欄目"國內(nèi)報(bào)刊"頁面的發(fā)布效果,如圖2所述。對(duì)發(fā)布模塊,由于一個(gè)網(wǎng)站總會(huì)有自己的發(fā)布模塊,并且這個(gè)發(fā)布模塊也是現(xiàn)有技術(shù)中的方案,所以本發(fā)明不準(zhǔn)備將這個(gè)模塊作為重點(diǎn)來闡述。本方案中發(fā)布消息生成模塊負(fù)責(zé)為網(wǎng)站的發(fā)布模塊生成合適的發(fā)布消息格式,這種格式根據(jù)網(wǎng)站發(fā)布模塊所需要的接口而定,如果發(fā)布模塊需要的是socket消息,那么方案中發(fā)布消息生成模塊就生成對(duì)應(yīng)的socket消息,如果發(fā)布模塊從數(shù)據(jù)庫中讀取發(fā)布消息,那么發(fā)布消息生成模塊就在數(shù)據(jù)庫中寫入發(fā)布消息。對(duì)于數(shù)據(jù)表配置模塊本模塊是保證其他模板正確運(yùn)行的基礎(chǔ),所以需要在系統(tǒng)初始化時(shí)進(jìn)行配置,且只需配置一次。以下結(jié)合附圖3的實(shí)施方式對(duì)本模塊的組成進(jìn)行具體說明a.數(shù)據(jù)表,即模塊預(yù)先選中數(shù)據(jù)庫的一些基礎(chǔ)表,這里需要從網(wǎng)站的數(shù)據(jù)庫中選擇"欄目"表、"模板"表、"稿件"表、"欄目_稿件"關(guān)聯(lián)表、"欄目-模板"關(guān)聯(lián)表等基礎(chǔ)表;b.數(shù)據(jù)副表,為每一張數(shù)據(jù)表創(chuàng)建對(duì)應(yīng)的副表(如為稿件表創(chuàng)建稿件副表),副表的表結(jié)構(gòu)與原表一致,但是增加了三列,一列標(biāo)志處理開始時(shí)間,一列標(biāo)志處理完成時(shí)間,一列標(biāo)志操作類型;c.觸發(fā)器,對(duì)每一張表創(chuàng)建一個(gè)觸發(fā)器,觸發(fā)器監(jiān)控插入/更新/刪除操作,在原數(shù)據(jù)表中的發(fā)生相關(guān)操作后,由觸發(fā)器將原數(shù)據(jù)表中的這條記錄寫入到對(duì)應(yīng)副表,并在副表中標(biāo)記這條記錄的操作類型,觸發(fā)器還將向數(shù)據(jù)變更處理模塊發(fā)起通知,通知數(shù)據(jù)變更9處理模塊哪個(gè)表有變更的數(shù)據(jù)。例如數(shù)據(jù)庫中有張表A,首先為表A建立一張副表A',在表A上創(chuàng)建觸發(fā)器,當(dāng)A表插入一條記錄后,觸發(fā)器將這條記錄寫入A',同時(shí)在A'中標(biāo)記該記錄類型為插入,向數(shù)據(jù)變更處理模塊發(fā)送通知。在這里,數(shù)據(jù)庫中存放的是數(shù)據(jù)表,數(shù)據(jù)表中包含具體的數(shù)據(jù),如稿件表中存放的就是稿件。因此,此處的觸發(fā)器觸發(fā)是指數(shù)據(jù)發(fā)生變化才會(huì)引起的觸發(fā),如增加、刪除或者修改,跟數(shù)據(jù)表的定義無關(guān)。如稿件表中新增了一篇稿件,這個(gè)新增動(dòng)作應(yīng)該引起觸發(fā)操作,或者稿件的標(biāo)題有所修改,這個(gè)修改動(dòng)作也應(yīng)該引起觸發(fā)。為了達(dá)到更好的效果,還包括一配置文件,將上述副表的結(jié)構(gòu)信息存放到配置文件中,便于數(shù)據(jù)變更處理模塊從配置文件中讀取配置。當(dāng)然,數(shù)據(jù)表的結(jié)構(gòu)信息也會(huì)存放到配置文件中。對(duì)于內(nèi)存數(shù)據(jù)庫模塊本模塊實(shí)質(zhì)是一個(gè)內(nèi)存緩存,在緩存中緩存了數(shù)據(jù)庫表中的部分?jǐn)?shù)據(jù)及一些計(jì)算結(jié)果,同時(shí)會(huì)定期將一些數(shù)據(jù)備份到本地文件中(內(nèi)存數(shù)據(jù)庫在備份過程中,不再接受來自數(shù)據(jù)變更處理模塊的查詢或更新請(qǐng)求)。內(nèi)存數(shù)據(jù)庫模塊存放了數(shù)據(jù)變更處理模塊所需要的所有數(shù)據(jù),使得數(shù)據(jù)變更處理模塊在進(jìn)行判斷處理時(shí),直接從內(nèi)存數(shù)據(jù)庫中查詢,不需要額外查詢實(shí)際數(shù)據(jù)庫。內(nèi)存數(shù)據(jù)庫中的數(shù)據(jù)表包括a).欄目表欄目表中存放的字段為欄目ID、父欄目ID、發(fā)布狀態(tài),這些數(shù)據(jù)來自于實(shí)際數(shù)據(jù)庫的欄目表的部分字段(實(shí)際數(shù)據(jù)庫欄目表還包含欄目名稱、欄目創(chuàng)建時(shí)間、欄目顯示順序等信息);b).欄目發(fā)布稿件表欄目發(fā)布稿件表中存放的字段為欄目ID,欄目下已發(fā)布的稿件ID,這些數(shù)據(jù)來自于實(shí)際數(shù)據(jù)庫的欄目稿件表,若實(shí)際數(shù)據(jù)庫欄目稿件表中某篇稿件未發(fā)布,則這條記錄不會(huì)緩存到內(nèi)存數(shù)據(jù)庫中;c).欄目模板表欄目模板表中存放的字段為欄目ID,欄目模板ID,稿件模板ID,這些數(shù)據(jù)也來自實(shí)際數(shù)據(jù)庫的欄目模板表的部分字段;d).模板表模板表中存放的字段為模板ID,模板類型,這些數(shù)據(jù)來自于實(shí)際數(shù)據(jù)庫的模板表的部分字段;e).模板組件表這個(gè)表是內(nèi)存數(shù)據(jù)庫特有的表,存放的字段為模板ID,組件GUID。在美工上傳一套模板到系統(tǒng)后,程序會(huì)檢查這個(gè)模板頁面的源碼,從中找出模板所用到的所有組件,更新這張表;f).組件信息表這個(gè)表也是內(nèi)存數(shù)據(jù)庫特有的表,存放的字段為組件GUID,組件關(guān)注的欄目ID,組件上次的查詢結(jié)果(即上次發(fā)布時(shí),根據(jù)這個(gè)組件的限制條件,從數(shù)據(jù)庫中查詢到的稿件ID集合),組件的查詢條件(存放組件的限制條件,以及對(duì)應(yīng)轉(zhuǎn)換后的實(shí)際數(shù)據(jù)庫的SQL查詢語句),組件查詢維度模型(對(duì)于組件的每一個(gè)限制條件建立一個(gè)維度,上次查詢結(jié)果10中的所有稿件的相關(guān)屬性在這個(gè)維度上有一個(gè)投影,投影的最小最大值就確定了這個(gè)維度的范圍,比如組件的一個(gè)限制條件是取欄目前三篇稿件,那么稿件的顯示順序就是一個(gè)維度,上次的查詢結(jié)果中三篇稿件的顯示順序分別為1.2,2.1,2.3,那么這個(gè)維度的范圍就是1.22.3。組件查詢維度模型是上次查詢后查詢條件的多維邊界值,比如一個(gè)組件的查詢條件是查找ID為8的欄目下,稿件時(shí)間最新且稿件標(biāo)題長度小于50的前兩篇稿件,上次查詢后查出了符合條件的兩篇稿件,一篇稿件時(shí)間是2008-11-0808:08:08,一篇是2008-11-0810:08:05,那么這個(gè)組件的查詢維度是一個(gè)二維模型,其中一維是時(shí)間,范圍為2008-11-0808:08:082008-11-0810:08:05,另一維是標(biāo)題長度,范圍為050。這個(gè)維度模型主要是為了在增加或刪除稿件時(shí),盡快的判斷,減少數(shù)據(jù)庫查詢次數(shù)。下面是內(nèi)存數(shù)據(jù)庫中的表結(jié)構(gòu)示例<table>tableseeoriginaldocumentpage11</column></row><table>內(nèi)存數(shù)據(jù)庫模塊具體包括以下部分?jǐn)?shù)據(jù)初始化子模塊在系統(tǒng)初始化時(shí)運(yùn)行,負(fù)責(zé)為內(nèi)存數(shù)據(jù)庫建立緩存結(jié)構(gòu)(即內(nèi)存數(shù)據(jù)表),同時(shí)從實(shí)際數(shù)據(jù)庫中加載所需數(shù)據(jù)到內(nèi)存數(shù)據(jù)表中。初始化過程中還需要對(duì)網(wǎng)站系統(tǒng)中涉及到的每個(gè)模板文件進(jìn)行解析,從中提取組件信息并計(jì)算組件結(jié)果,將其記錄到內(nèi)存數(shù)據(jù)表中。數(shù)據(jù)同步子模塊定期將內(nèi)存數(shù)據(jù)庫中數(shù)據(jù)表的數(shù)據(jù)備份到文件系統(tǒng),當(dāng)數(shù)據(jù)備份完成后,將所有數(shù)據(jù)副表中處理結(jié)束時(shí)間在備份時(shí)間前的記錄全部刪除。當(dāng)內(nèi)存數(shù)據(jù)庫出現(xiàn)異常而重啟時(shí),內(nèi)存數(shù)據(jù)庫從文件系統(tǒng)中恢復(fù)數(shù)據(jù),并對(duì)所有數(shù)據(jù)副表中的記錄,將其處理開始時(shí)間、處理結(jié)束時(shí)間置空,這里應(yīng)該將副表中所有記錄的時(shí)間重置,雖然有些記錄在內(nèi)存數(shù)據(jù)庫正常時(shí)已經(jīng)處理結(jié)束,標(biāo)記了處理結(jié)束時(shí)間,但是并沒有同步到文件系統(tǒng)中,如果同步了則這條記錄會(huì)被刪掉,所以再次重啟內(nèi)存數(shù)據(jù)庫、從文件系統(tǒng)恢復(fù)后,還需要把這條記錄重置,當(dāng)成未處理的,通知數(shù)據(jù)變更處理模塊有哪些數(shù)據(jù)副表還有待處理的記錄;數(shù)據(jù)操作接口子模塊為數(shù)據(jù)變更處理模塊提供查詢及修改服務(wù)。以下對(duì)本模塊的初始化流程進(jìn)行具體說明11a.清空現(xiàn)有的數(shù)據(jù),在內(nèi)存中創(chuàng)建必要的表;b.內(nèi)存數(shù)據(jù)庫從數(shù)據(jù)庫中為每張表加載所需數(shù)據(jù);c.內(nèi)存數(shù)據(jù)庫為每個(gè)組件計(jì)算查詢結(jié)果及查詢維度。內(nèi)存數(shù)據(jù)庫的職能是存儲(chǔ)一些必要的數(shù)據(jù)到內(nèi)存,存儲(chǔ)一些查詢結(jié)果及查詢條件。如果有必要重新計(jì)算查詢結(jié)果,需要連接數(shù)據(jù)庫進(jìn)行計(jì)算,獲取查詢結(jié)果保存到內(nèi)存數(shù)據(jù)庫中。對(duì)于數(shù)據(jù)變更處理模塊本模塊需要獲取由數(shù)據(jù)庫觸發(fā)器反饋的數(shù)據(jù)變更,并將這種變更與內(nèi)存數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行比對(duì)計(jì)算,判斷此次更新是否需要更新頁面,如果需要更新,找出需要更新的欄目/稿件,向發(fā)布消息生成模塊發(fā)送結(jié)果。數(shù)據(jù)變更處理模塊是唯一更改內(nèi)存數(shù)據(jù)庫的模塊。在讀取一條記錄后,對(duì)這條記錄標(biāo)記處理開始時(shí)間,以免記錄讀取子模塊再次掃描到這條記錄重復(fù)處理。這條記錄處理完畢后標(biāo)記處理結(jié)束時(shí)間,表示正常處理結(jié)束。如果一條記錄在處理過程中,由于內(nèi)存數(shù)據(jù)庫的無法訪問導(dǎo)致處理失敗,則這條記錄只有處理開始時(shí)間,沒有處理結(jié)束時(shí)間。內(nèi)存數(shù)據(jù)庫會(huì)在定期備份完畢后,將所有數(shù)據(jù)副表中,處理結(jié)束時(shí)間在備份時(shí)間前的記錄全部刪除。這里定義數(shù)據(jù)變更處理模塊與發(fā)布消息生成模板間的消息格式[O107]消息(對(duì)象ID,對(duì)象類型,操作類型)在一條消息中,對(duì)象ID可以是欄目ID或者稿件ID,對(duì)象類型標(biāo)志對(duì)象ID是欄目還是稿件,操作類型標(biāo)志這條消息是發(fā)布頁面還是刪除頁面。為了減少發(fā)送重復(fù)消息給發(fā)布消息生成模塊,數(shù)據(jù)變更處理模塊中存有消息隊(duì)列,當(dāng)數(shù)據(jù)變更處理模塊向消息隊(duì)列添加消息時(shí),由消息隊(duì)列判斷這條消息是否已存在于隊(duì)列中,如果不在則向隊(duì)列添加這條消息,如果這條消息已在消息隊(duì)列中,則跳過該消息,在所有計(jì)算完成后,統(tǒng)一向發(fā)布消息生成模塊提交隊(duì)列。所述數(shù)據(jù)變更處理模塊具體包括獲取通知子模塊,用于接受來自觸發(fā)器或內(nèi)存數(shù)據(jù)庫的通知,分析有哪些數(shù)據(jù)副表中有待處理的記錄;頁面更新消息生成子模塊,根據(jù)每條記錄的類型,結(jié)合內(nèi)存數(shù)據(jù)庫模塊進(jìn)行分析,判斷這條記錄是否會(huì)產(chǎn)生發(fā)布消息,如果會(huì)則生成對(duì)應(yīng)的消息到消息隊(duì)列;消息隊(duì)列提交子模塊,用于向發(fā)布消息生成模塊提交所述消息隊(duì)列。記錄讀取子模塊,對(duì)獲取通知子模塊中分析的數(shù)據(jù)副表,讀取上述數(shù)據(jù)副表中的所有待處理記錄,并標(biāo)志這些記錄的處理開始時(shí)間為當(dāng)前時(shí)間;記錄結(jié)束子模塊,對(duì)記錄讀取子模塊中讀取的所有記錄,在頁面更新消息生成子模塊處理后,標(biāo)志這些記錄的處理結(jié)束時(shí)間為當(dāng)前時(shí)間。頁面更新消息生成子模塊將記錄讀取子模塊中讀取的記錄按"欄目類型"、"模板類型"、"欄目模板類型"、"稿件類型"四種類型加以區(qū)分,每種類型下按增加、刪除、修改三種操作進(jìn)行不同處理分析,將分析得出的消息加入消息隊(duì)列。頁面更新消息生成子模塊寫入消息隊(duì)列中的消息分為以下四種(欄目ID,'欄目','刪除')——表示網(wǎng)站中該欄目頁面需要?jiǎng)h除,網(wǎng)站發(fā)布程序可以生成空白頁或頁面跳轉(zhuǎn),這樣當(dāng)用戶訪問該欄目頁面的URL地址時(shí),會(huì)返回給用戶空白頁面或直接跳轉(zhuǎn)到網(wǎng)站的地址不存在頁面。(欄目ID,'欄目','發(fā)布')——表示網(wǎng)站中該欄目頁面需要重新發(fā)布。(稿件ID,'稿件','刪除')——表示網(wǎng)站中該稿件頁面需要?jiǎng)h除,網(wǎng)站發(fā)布程序處理同欄目刪除。(稿件ID,'稿件','發(fā)布')——表示網(wǎng)站中該稿件頁面需要重新發(fā)布。下面分具體情況進(jìn)行說明1.欄目類型1.1記錄是刪除欄目需要從內(nèi)存數(shù)據(jù)庫模塊的欄目表中進(jìn)行查找。從內(nèi)存數(shù)據(jù)庫模塊的欄目表中以該欄目為根節(jié)點(diǎn)構(gòu)造一個(gè)樹(樹中每個(gè)節(jié)點(diǎn)表示一個(gè)欄目,其在欄目表中有幾個(gè)子欄目,那么在樹中這個(gè)節(jié)點(diǎn)對(duì)應(yīng)擁有幾個(gè)分支節(jié)點(diǎn),如果其在欄目表中沒有子欄目,這個(gè)節(jié)點(diǎn)為葉子節(jié)點(diǎn))。從這棵樹中找到狀態(tài)為已發(fā)布的所有欄目——記為欄目集合A、從欄目發(fā)布稿件表中找到這些欄目下所有已發(fā)布的稿件——記為稿件集合B,對(duì)于A中等每一個(gè)欄目,生成(欄目ID,'欄目','刪除')消息到消息隊(duì)列,對(duì)于B中每一篇稿件,生成(稿件ID,'稿件','刪除')消息到消息隊(duì)列。在內(nèi)存數(shù)據(jù)庫中的組件信息表中進(jìn)行查找,找到關(guān)注A中任何欄目的所有組件、通過模板組件表找到對(duì)應(yīng)的所有模板——記為模板集合C,對(duì)于C中每一個(gè)模板1.1.1如果從模板表中得知該模板為欄目模板,則通過欄目模板表找到這個(gè)模板關(guān)聯(lián)的且不屬于集合A中的欄目——記為欄目集合D,則對(duì)D中的每一個(gè)欄目,將(欄目ID,'欄目','發(fā)布')消息寫入消息隊(duì)列。1.1.2如果模板為文章模板,則通過欄目模板表找到這個(gè)模板的且不屬于集合A中的欄目——記為欄目集合E,對(duì)E中的每一個(gè)欄目,從欄目發(fā)布稿件表中找到欄目下所有已發(fā)布的稿件,對(duì)其中每篇稿件,將(稿件ID,'稿件','發(fā)布')消息寫入消息隊(duì)列。最后,對(duì)這棵樹中的每個(gè)節(jié)點(diǎn)欄目,將內(nèi)存數(shù)據(jù)庫中欄目表、欄目發(fā)布稿件表、欄目模板表中與該欄目有關(guān)的記錄刪除,然后標(biāo)記記錄的處理結(jié)束時(shí)間為當(dāng)前時(shí)間;1.2記錄是更新欄目直接標(biāo)記記錄的處理結(jié)束時(shí)間為當(dāng)前時(shí)間;1.3記錄是增加欄目在內(nèi)存數(shù)據(jù)庫的欄目表中加入這個(gè)欄目,標(biāo)記記錄的處理結(jié)束時(shí)間為當(dāng)前時(shí)間;2.模板類型2.l記錄是增加模板在內(nèi)存數(shù)據(jù)庫的模板表中加入這個(gè)模板。對(duì)模板文件進(jìn)行分析,提取模板中的組件,將模板組件信息寫入內(nèi)存數(shù)據(jù)庫中的模板組件表;對(duì)每一個(gè)組件進(jìn)行計(jì)算,將計(jì)算后的查詢結(jié)果、查詢維度等信息寫入內(nèi)存數(shù)據(jù)庫中的組件信息表。標(biāo)記記錄的處理結(jié)束時(shí)間為當(dāng)前時(shí)間;2.2記錄是修改模板對(duì)模板文件進(jìn)行分析,提取模板中的組件,將模板組件信息寫入內(nèi)存數(shù)據(jù)庫中的模板組件表;對(duì)每一個(gè)組件進(jìn)行計(jì)算,將計(jì)算后的查詢結(jié)果、查詢維度等信息寫入內(nèi)存數(shù)據(jù)庫中的組件信息表。2.2.1如果該模板是欄目模板,則將欄目模板表中關(guān)聯(lián)該模板的且已發(fā)布的欄目,對(duì)其中每個(gè)欄目,將(欄目ID,'欄目','發(fā)布')消息寫入消息隊(duì)列。2.2.2如果該模板是文章模板,則將欄目模板表中關(guān)聯(lián)該模板的欄目下所有已發(fā)布的稿件,對(duì)其中的每篇稿件,將(稿件ID,'稿件','發(fā)布')消息寫入消息隊(duì)列。對(duì)該模板執(zhí)行標(biāo)記Markl。標(biāo)記記錄處理結(jié)束時(shí)間為當(dāng)前時(shí)間。2.3記錄是刪除模板2.3.1如果模板是欄目模板,從欄目模板表中找到關(guān)聯(lián)該模板的所有且已發(fā)布的欄目,對(duì)于每個(gè)欄目,將(欄目ID,'欄目','刪除')消息寫入消息隊(duì)列。2.3.2如果模板是稿件模板,從欄目模板表中找到關(guān)聯(lián)該模板的所有欄目,對(duì)于每個(gè)欄目下所有已發(fā)布的稿件,將(稿件ID,'稿件','刪除')消息寫入消息隊(duì)列。在模板表、模板組件表中刪除模板相關(guān)數(shù)據(jù)。標(biāo)記記錄的處理結(jié)束時(shí)間為當(dāng)前時(shí)間;3.欄目模板類型3.1記錄是新增欄目模板的對(duì)應(yīng)關(guān)系內(nèi)存數(shù)據(jù)庫欄目模板表中增加一條數(shù)據(jù)。標(biāo)記Markl開始從內(nèi)存數(shù)據(jù)庫中組件信息表中找到這個(gè)模板中的所有組件,對(duì)于每個(gè)組件計(jì)算結(jié)果中涉及到的稿件,如果之前未發(fā)布,則將(稿件ID,'稿件','發(fā)布')消息寫入消息隊(duì)列。將這個(gè)模板中所有組件涉及到的且之前未發(fā)布的欄目——記為欄目集合A。對(duì)A中的每個(gè)欄目,將(欄目ID,'欄目','發(fā)布')消息寫入消息隊(duì)列。對(duì)A中的每個(gè)欄目,如果其關(guān)聯(lián)了欄目模板,則執(zhí)行標(biāo)記Markl。標(biāo)記Markl結(jié)束。3.1.l如果該模板是欄目模板,則將(欄目ID,'欄目','發(fā)布')消息寫入消息隊(duì)列。3.1.2如果該模板是文章模板,則對(duì)欄目下所有已發(fā)布的稿件,對(duì)其中的每篇稿件,將(稿件ID,'稿件','發(fā)布')消息寫入消息隊(duì)列。標(biāo)記記錄處理結(jié)束時(shí)間為當(dāng)前時(shí)間。3.2記錄是更新欄目模板的對(duì)應(yīng)關(guān)系內(nèi)存數(shù)據(jù)庫欄目模板表中更新對(duì)應(yīng)數(shù)據(jù)。其余操作同3.13.3記錄是刪除欄目模板的對(duì)應(yīng)關(guān)系內(nèi)存數(shù)據(jù)庫欄目模板表中刪除對(duì)應(yīng)數(shù)據(jù)3.3.l如果該模板是欄目模板,將(欄目ID,'欄目','刪除')消息寫入消息隊(duì)列。3.3.2如果該模板是文章模板,對(duì)欄目下所有已發(fā)布的稿件,對(duì)其中的每篇稿件,將(稿件ID,'稿件','刪除')消息寫入消息隊(duì)列。標(biāo)記記錄處理結(jié)束時(shí)間為當(dāng)前時(shí)間。4.稿件類型4.l記錄是增加稿件獲取稿件所在的欄目ID,從內(nèi)存數(shù)據(jù)庫中的組件信息表找到關(guān)注該欄目的所有組件,對(duì)其中每一個(gè)組件,需要根據(jù)組件的查詢維度及查詢條件,判斷這篇稿件是否影響了組件的查詢結(jié)果。4.1.1如果對(duì)組件的查詢結(jié)果產(chǎn)生影響,需要重新根據(jù)組件的查詢條件,向數(shù)據(jù)庫提交查詢,獲取查詢結(jié)果后更新內(nèi)存數(shù)據(jù)庫組件信息表中組件的查詢維度及查詢結(jié)果。同時(shí)根據(jù)模板組件表獲取組件所在的模板,根據(jù)欄目模板表獲取涉及到的欄目,如果欄目之前已發(fā)布過,則需要重新發(fā)布該欄目,將(欄目ID,'欄目','發(fā)布')消息寫入消息隊(duì)列;如果這篇稿件未發(fā)布過,將(稿件ID,'稿件','發(fā)布')消息寫入消息隊(duì)列,同時(shí)對(duì)這篇稿件用到的文章模板,執(zhí)行標(biāo)記Markl。在欄目發(fā)布稿件表中將這篇稿件標(biāo)記為已發(fā)布。標(biāo)記記錄處理結(jié)束時(shí)間為當(dāng)前時(shí)間。4.1.2如果對(duì)組件的查詢結(jié)果不產(chǎn)生影響,標(biāo)記記錄處理結(jié)束時(shí)間為當(dāng)前時(shí)間。4.2記錄是更新稿件操作同4.14.3記錄是刪除稿件獲取稿件所在的欄目ID,從內(nèi)存數(shù)據(jù)庫中的組件信息表找到關(guān)注該欄目的所有組件,對(duì)其中每一個(gè)組件,需要根據(jù)組件的查詢維度及查詢條件,判斷這篇稿件是否影響了組件的查詢結(jié)果。4.1.1如果對(duì)組件的查詢結(jié)果產(chǎn)生影響,需要重新根據(jù)組件的查詢條件,向數(shù)據(jù)庫提交查詢,獲取查詢結(jié)果后更新內(nèi)存數(shù)據(jù)庫組件信息表中組件的查詢維度及查詢結(jié)果。同時(shí)根據(jù)模板組件表獲取組件所在的模板,根據(jù)欄目模板表獲取涉及到的欄目,如果欄目之前已發(fā)布過,則需要重新發(fā)布該欄目,將(欄目ID,'欄目','發(fā)布')消息寫入消息隊(duì)列;如果這篇稿件已發(fā)布過,將(稿件ID,'稿件','刪除')消息寫入消息隊(duì)列。從欄目發(fā)布稿件表中刪除記錄。標(biāo)記記錄處理結(jié)束時(shí)間為當(dāng)前時(shí)間。4.1.2如果對(duì)組件的查詢結(jié)果不產(chǎn)生影響,從欄目發(fā)布稿件表中刪除記錄。標(biāo)記記錄處理結(jié)束時(shí)間為當(dāng)前時(shí)間。對(duì)于發(fā)布消息生成模塊本模塊對(duì)消息隊(duì)列中的每條消息,重新組織成網(wǎng)站實(shí)際發(fā)布程序可以理解的消息格式,傳送給發(fā)布程序,實(shí)現(xiàn)頁面發(fā)布。下面對(duì)本發(fā)明中的主要模塊——內(nèi)存數(shù)據(jù)庫模塊中幾種特殊情況作進(jìn)一步地描述第一種情況內(nèi)存數(shù)據(jù)庫突然出現(xiàn)異常中斷后恢復(fù)。內(nèi)存數(shù)據(jù)庫在沒有外部操作時(shí)(沒有與數(shù)據(jù)變更處理模塊發(fā)生交互),定期將內(nèi)部存儲(chǔ)的數(shù)據(jù)寫入磁盤文件。當(dāng)寫入成功后,標(biāo)記寫入時(shí)間,同時(shí)將"數(shù)據(jù)表配置文件"記錄的所有副表中,處理結(jié)束時(shí)間在寫入時(shí)間前的記錄全部刪除。當(dāng)內(nèi)存數(shù)據(jù)庫中斷后恢復(fù)時(shí),首先檢查磁盤文件,找到最新的寫入時(shí)間,如果沒有寫入時(shí)間,標(biāo)志內(nèi)存數(shù)據(jù)庫需要重新初始化;如果有最新的寫入時(shí)間,內(nèi)存數(shù)據(jù)庫根據(jù)磁盤文件重建內(nèi)部數(shù)據(jù)結(jié)構(gòu),恢復(fù)工作。恢復(fù)后對(duì)"數(shù)據(jù)表配置文件"記錄的所有副表中的所有記錄,將其處理開始時(shí)間、處理結(jié)束時(shí)間重置為空,然后向數(shù)據(jù)變更處理模塊發(fā)送通知,提醒數(shù)據(jù)變更處理模塊哪些副表中有記錄待處理。第二種情況數(shù)據(jù)變更處理模塊事務(wù)提交失敗。數(shù)據(jù)變更處理模塊向內(nèi)存數(shù)據(jù)庫事務(wù)提交成功時(shí),會(huì)設(shè)置數(shù)據(jù)庫副表中相關(guān)記錄的處理結(jié)束時(shí)間。當(dāng)提交失敗時(shí),其原因可能是內(nèi)存數(shù)據(jù)庫工作不正?;驔]有啟動(dòng)。需要將失敗的時(shí)間等詳細(xì)信息記錄到日志文件,以發(fā)現(xiàn)問題。在內(nèi)存數(shù)據(jù)庫恢復(fù)后,繼續(xù)處理之前未處理或處理失敗的數(shù)據(jù)。本發(fā)明同時(shí)提供一種網(wǎng)站更新實(shí)施發(fā)布的方法,用于在底層數(shù)據(jù)發(fā)生變化時(shí),自動(dòng)進(jìn)行更新,實(shí)現(xiàn)頁面發(fā)布。主要方法包括如下步驟為數(shù)據(jù)表建立觸發(fā)器;實(shí)時(shí)監(jiān)控?cái)?shù)據(jù)表中的數(shù)據(jù),當(dāng)數(shù)據(jù)變更時(shí),進(jìn)行觸發(fā);判斷是否更新頁面;如更新,將更新消息傳送給網(wǎng)站發(fā)布程序,實(shí)現(xiàn)頁面發(fā)布。其中,為數(shù)據(jù)表建立觸發(fā)器,具體操作為選擇網(wǎng)站數(shù)據(jù)庫中的數(shù)據(jù)表;為每個(gè)數(shù)據(jù)表創(chuàng)建相應(yīng)副表;為每個(gè)數(shù)據(jù)表創(chuàng)建觸發(fā)器。數(shù)據(jù)表以及數(shù)據(jù)副表的結(jié)構(gòu),以及觸發(fā)器的觸發(fā)操作過程,由于跟上述系統(tǒng)發(fā)明中的一一對(duì)應(yīng),在此不再具體介紹。還包括緩存數(shù)據(jù)庫表中的部分?jǐn)?shù)據(jù)及計(jì)算結(jié)果,同時(shí)以定期將緩存中的數(shù)據(jù)備份到本地文件的方式保證數(shù)據(jù)的完整性的操作。所述緩存的具體操作包括數(shù)據(jù)初始化,為內(nèi)存數(shù)據(jù)庫建立緩存結(jié)構(gòu)即內(nèi)存數(shù)據(jù)表,同時(shí)從實(shí)際數(shù)據(jù)庫中加載所需數(shù)據(jù)到內(nèi)存數(shù)據(jù)表中,對(duì)網(wǎng)站系統(tǒng)中涉及到的每個(gè)模板文件進(jìn)行解析,從中提取組件信息并計(jì)算組件結(jié)果,將其記錄到內(nèi)存數(shù)據(jù)表中;定期將內(nèi)存數(shù)據(jù)庫中數(shù)據(jù)表的數(shù)據(jù)備份到文件系統(tǒng),當(dāng)數(shù)據(jù)備份完成后,將所有數(shù)據(jù)副表中處理結(jié)束時(shí)間在備份時(shí)間前的記錄全部刪除,在內(nèi)存數(shù)據(jù)庫出現(xiàn)異常時(shí)重啟內(nèi)存數(shù)據(jù)庫時(shí),從文件系統(tǒng)恢復(fù)數(shù)據(jù),并對(duì)所有數(shù)據(jù)副表中的記錄,將其處理開始時(shí)間、處理結(jié)束時(shí)間置空,通知數(shù)據(jù)變更處理模塊有哪些數(shù)據(jù)副表還有待處理的記錄。其中,判斷是否更新頁面的操作包括接受來自數(shù)據(jù)庫觸發(fā)器的變更請(qǐng)求;從該數(shù)據(jù)副表中讀取上述記錄;將上述記錄結(jié)合內(nèi)存數(shù)據(jù)庫模塊中的數(shù)據(jù)記錄進(jìn)行比對(duì)計(jì)算,將需要更新的信息組織成對(duì)應(yīng)的消息寫入消息隊(duì)列;向發(fā)布消息生成模塊提交消息隊(duì)列。為了達(dá)到更好的效果,具體實(shí)施中還包括以下操作從該數(shù)據(jù)表中讀取上述記錄時(shí),將數(shù)據(jù)表中這些記錄的處理開始時(shí)間標(biāo)記為當(dāng)前時(shí)間;以及記錄處理完畢后,向數(shù)據(jù)庫標(biāo)記記錄的處理結(jié)束時(shí)間。將上述記錄結(jié)合內(nèi)存數(shù)據(jù)庫模塊中的數(shù)據(jù)記錄進(jìn)行比對(duì)計(jì)算,具體操作為將所述記錄按"欄目類型"、"模板類型"、"欄目模板類型"、"稿件類型"四種類型加以區(qū)分,每種類型下按增加、刪除、修改三種操作進(jìn)行處理分析,判斷這條記錄是否會(huì)產(chǎn)生發(fā)布消息,如果會(huì)則生成對(duì)應(yīng)的消息加入消息隊(duì)列。下面結(jié)合附圖4實(shí)施方式對(duì)本發(fā)明的方法進(jìn)行說明(601)定義數(shù)據(jù)表、建立觸發(fā)器及數(shù)據(jù)副表;(602)程序初始化,內(nèi)存數(shù)據(jù)庫初始化;內(nèi)存數(shù)據(jù)庫初始化時(shí)需要從數(shù)據(jù)庫中加載輸入,并且從本地文件中讀取/分析模板內(nèi)容,進(jìn)行組件計(jì)算,將計(jì)算結(jié)果保存到內(nèi)存表中;內(nèi)存數(shù)據(jù)庫定期將存儲(chǔ)的數(shù)據(jù)寫入本地文件,當(dāng)異常中斷后恢復(fù)時(shí),也需要從本地文件中加載數(shù)據(jù);(603)觸發(fā)器(此處用oracle表)監(jiān)控到數(shù)據(jù)變化,通知數(shù)據(jù)變更處理模塊;(604)數(shù)據(jù)變更處理模塊從通知中獲取表名,從數(shù)據(jù)庫中獲取表中所有變更的數(shù)據(jù);(605)數(shù)據(jù)變更處理模塊標(biāo)記數(shù)據(jù)的處理時(shí)間;(606)數(shù)據(jù)變更處理模塊對(duì)變更的數(shù)據(jù)進(jìn)行分類處理,并將這種變更與內(nèi)存數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行比對(duì)計(jì)算,判斷此次更新是否需要更新頁面,如果需要更新,找出需要更新的欄目/稿件;(607)數(shù)據(jù)變更處理模塊需要更新內(nèi)存數(shù)據(jù)庫時(shí),向內(nèi)存數(shù)據(jù)庫發(fā)起事務(wù)請(qǐng)求;(608)數(shù)據(jù)變更處理模塊將需要處理的消息寫入消息隊(duì)列,傳給發(fā)布消息生成模塊;(609)記錄處理完畢后,向數(shù)據(jù)庫標(biāo)記記錄的處理結(jié)束時(shí)間;(610)發(fā)布消息生成模塊獲取消息隊(duì)列中的消息,生成適合網(wǎng)站發(fā)布程序的消息格式,將消息傳給網(wǎng)站發(fā)布程序,實(shí)現(xiàn)欄目/稿件頁面發(fā)布。具體進(jìn)行比對(duì)計(jì)算的要求和標(biāo)準(zhǔn)由于上述系統(tǒng)技術(shù)方案的實(shí)施方式已經(jīng)具體描述,在此不細(xì)講。本發(fā)明有別于其他類似解決方案的地方在于由數(shù)據(jù)表觸發(fā)器在數(shù)據(jù)庫層面捕捉數(shù)據(jù)變更,由程序處理數(shù)據(jù)變更;采用內(nèi)存數(shù)據(jù)庫快速高效維持?jǐn)?shù)據(jù);自動(dòng)找到需要更新的欄目/稿件,并產(chǎn)生發(fā)布消息。通過本發(fā)明所述的技術(shù)方案,能夠快速、高效、自動(dòng)的實(shí)現(xiàn)頁面更新流程。以上所述,僅為本發(fā)明實(shí)施例的具體實(shí)施方式,但本發(fā)明實(shí)施例的保護(hù)范圍并不局限于此,任何熟悉本
技術(shù)領(lǐng)域
的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明實(shí)施例的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。權(quán)利要求一種網(wǎng)站更新實(shí)時(shí)發(fā)布系統(tǒng),包括以下模塊數(shù)據(jù)表配置模塊,用于配置數(shù)據(jù)庫中的數(shù)據(jù)表,并針對(duì)數(shù)據(jù)表中的數(shù)據(jù)變更設(shè)置觸發(fā)器;內(nèi)存數(shù)據(jù)庫模塊,用于緩存數(shù)據(jù)庫表中的部分?jǐn)?shù)據(jù)及計(jì)算結(jié)果,并進(jìn)行備份;數(shù)據(jù)變更處理模塊,用于獲取變更數(shù)據(jù),并將所述數(shù)據(jù)與內(nèi)存數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行比對(duì)計(jì)算,判斷是否需要進(jìn)行更新,如果需要更新,則向發(fā)布消息生成模塊提交消息隊(duì)列;發(fā)布消息生成模塊,用于將消息隊(duì)列中的消息組織成網(wǎng)站實(shí)際發(fā)布程序所需的消息格式,以實(shí)現(xiàn)頁面發(fā)布。2.如權(quán)利要求l所述的網(wǎng)站更新實(shí)時(shí)發(fā)布系統(tǒng),其特征在于還包括發(fā)布模塊,所述發(fā)布模塊根據(jù)發(fā)布消息生成模塊傳來的發(fā)布消息,將更新后的數(shù)據(jù)在網(wǎng)站上進(jìn)行發(fā)布。3.如權(quán)利要求1所述的網(wǎng)站更新實(shí)時(shí)發(fā)布系統(tǒng),其特征在于所述數(shù)據(jù)表配置模塊除包括用于存放各種數(shù)據(jù)的數(shù)據(jù)表外,還包括為所選數(shù)據(jù)表創(chuàng)建的數(shù)據(jù)副表,所述副表的表結(jié)構(gòu)與數(shù)據(jù)表一致,還包括三列,分別用于標(biāo)志處理開始時(shí)間、標(biāo)志處理完成時(shí)間以及標(biāo)志操作類型;觸發(fā)器,在實(shí)際數(shù)據(jù)庫中為所選數(shù)據(jù)表而建立,所述觸發(fā)器建立在每張數(shù)據(jù)表上,并實(shí)時(shí)對(duì)數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行監(jiān)控;配置文件,存放數(shù)據(jù)表、數(shù)據(jù)副表相關(guān)數(shù)據(jù)字典的信息。4.如權(quán)利要求3所述的網(wǎng)站更新實(shí)時(shí)發(fā)布系統(tǒng),其特征在于所述觸發(fā)器監(jiān)控?cái)?shù)據(jù)表上的Insert(插入)、Update(更新)、Delete(刪除)操作,當(dāng)有上述操作時(shí),觸發(fā)器將操作涉及到的數(shù)據(jù)表上的記錄寫入對(duì)應(yīng)的數(shù)據(jù)副表,并標(biāo)志相應(yīng)的操作類型,通知數(shù)據(jù)變更處理模塊哪些數(shù)據(jù)副表中有新記錄。5.如權(quán)利要求1所述的網(wǎng)站更新實(shí)時(shí)發(fā)布系統(tǒng),其特征在于所述內(nèi)存數(shù)據(jù)庫模塊具體包括數(shù)據(jù)初始化子模塊在系統(tǒng)初始化時(shí)運(yùn)行,負(fù)責(zé)為內(nèi)存數(shù)據(jù)庫建立緩存結(jié)構(gòu)即內(nèi)存數(shù)據(jù)表,同時(shí)從實(shí)際數(shù)據(jù)庫中加載所需數(shù)據(jù)到內(nèi)存數(shù)據(jù)表中,初始化過程中還需要對(duì)網(wǎng)站系統(tǒng)中涉及到的每個(gè)模板文件進(jìn)行解析,從中提取組件信息并計(jì)算組件結(jié)果,將其記錄到內(nèi)存數(shù)據(jù)表中;數(shù)據(jù)同步子模塊為內(nèi)存數(shù)據(jù)庫的備份恢復(fù)提供支持,子模塊定期將內(nèi)存數(shù)據(jù)庫中數(shù)據(jù)表的數(shù)據(jù)備份到文件系統(tǒng),當(dāng)數(shù)據(jù)備份完成后,將所有數(shù)據(jù)副表中處理結(jié)束時(shí)間在備份時(shí)間前的記錄全部刪除;數(shù)據(jù)操作接口子模塊為數(shù)據(jù)變更處理模塊提供查詢及修改服務(wù)。6.如權(quán)利要求1-5任一所述的網(wǎng)站更新實(shí)時(shí)發(fā)布系統(tǒng),其特征在于所述數(shù)據(jù)變更處理模塊具體包括獲取通知子模塊,用于接受來自觸發(fā)器或內(nèi)存數(shù)據(jù)庫的通知,分析有哪些數(shù)據(jù)副表需要處理;頁面更新消息生成子模塊,根據(jù)每條記錄的類型,判斷這條記錄是否會(huì)產(chǎn)生發(fā)布消息,如果會(huì)則生成對(duì)應(yīng)的消息到消息隊(duì)列;消息隊(duì)列提交子模塊,用于向發(fā)布消息生成模塊提交所述消息隊(duì)列。7.如權(quán)利要求6所述的網(wǎng)站更新實(shí)時(shí)發(fā)布系統(tǒng),其特征在于,還包括記錄讀取子模塊,對(duì)獲取通知子模塊中分析的數(shù)據(jù)副表,讀取上述數(shù)據(jù)副表中的所有待處理記錄,并標(biāo)志這些記錄的處理開始時(shí)間為當(dāng)前時(shí)間;記錄結(jié)束子模塊,對(duì)記錄讀取子模塊中讀取的所有記錄,在頁面更新消息生成子模塊處理后,標(biāo)志這些記錄的處理結(jié)束時(shí)間為當(dāng)前時(shí)間。8.如權(quán)利要求6或7所述的網(wǎng)站更新實(shí)時(shí)發(fā)布系統(tǒng),其特征在于,所述頁面更新消息生成子模塊將記錄讀取子模塊中讀取的記錄按"欄目類型"、"模板類型"、"欄目模板類型"、"稿件類型"四種類型加以區(qū)分,每種類型下按增加、刪除、修改三種操作進(jìn)行處理分析,來判斷這條記錄是否會(huì)產(chǎn)生發(fā)布消息,如果會(huì)則生成對(duì)應(yīng)的消息加入消息隊(duì)列。9.一種網(wǎng)站更新實(shí)時(shí)發(fā)布方法,其特征在于包括以下步驟為數(shù)據(jù)表建立觸發(fā)器;實(shí)時(shí)監(jiān)控?cái)?shù)據(jù)表中的數(shù)據(jù),當(dāng)數(shù)據(jù)變更時(shí),進(jìn)行觸發(fā);判斷是否更新頁面;如更新,將更新消息傳送給網(wǎng)站發(fā)布程序,實(shí)現(xiàn)頁面發(fā)布。10.如權(quán)利要求9所述的網(wǎng)站更新實(shí)時(shí)發(fā)布方法,其特征在于為數(shù)據(jù)表建立觸發(fā)器,具體操作為選擇網(wǎng)站數(shù)據(jù)庫中的數(shù)據(jù)表;為每個(gè)數(shù)據(jù)表創(chuàng)建相應(yīng)副表;為每個(gè)數(shù)據(jù)表創(chuàng)建觸發(fā)器。11.如權(quán)利要求IO所述的網(wǎng)站更新實(shí)時(shí)發(fā)布方法,其特征在于所述副表結(jié)構(gòu)與原數(shù)據(jù)表一致,且增加了三列,作用分別為標(biāo)志處理開始時(shí)間,標(biāo)志處理完成時(shí)間,標(biāo)志操作類型。12.如權(quán)利要求ll所述的網(wǎng)站更新實(shí)時(shí)發(fā)布方法,其特征在于所述操作類型包括插入、更新、刪除操作。13.如權(quán)利要求12所述的網(wǎng)站更新實(shí)時(shí)發(fā)布方法,其特征在于觸發(fā)器的操作具體為所述觸發(fā)器監(jiān)控?cái)?shù)據(jù)表上的Insert(插入)、Update(更新)、Delete(刪除)操作,當(dāng)有上述操作時(shí),觸發(fā)器將操作涉及到的數(shù)據(jù)表上的記錄寫入對(duì)應(yīng)的數(shù)據(jù)副表,并標(biāo)志相應(yīng)的操作類型,然后通知數(shù)據(jù)變更處理模塊這個(gè)數(shù)據(jù)副表需要處理。14.如權(quán)利要求12所述的網(wǎng)站更新實(shí)時(shí)發(fā)布方法,其特征在于所述數(shù)據(jù)表為網(wǎng)站基礎(chǔ)表,包括但不限于欄目表、模板表、稿件表、欄目_稿件關(guān)聯(lián)表、欄目_模板關(guān)聯(lián)表、發(fā)布規(guī)則表、欄目-發(fā)布規(guī)則關(guān)聯(lián)表。15.如權(quán)利要求10-14任一所述的網(wǎng)站更新實(shí)時(shí)發(fā)布方法,其特征在于還包括緩存數(shù)據(jù)庫表中的部分?jǐn)?shù)據(jù)及計(jì)算結(jié)果,同時(shí)以定期將緩存中的數(shù)據(jù)備份到本地文件的方式保證數(shù)據(jù)的完整性。16.如權(quán)利要求15所述的網(wǎng)站更新實(shí)時(shí)發(fā)布方法,其特征在于所述緩存的具體操作包括數(shù)據(jù)初始化,為內(nèi)存數(shù)據(jù)庫建立緩存結(jié)構(gòu)即內(nèi)存數(shù)據(jù)表,同時(shí)從實(shí)際數(shù)據(jù)庫中加載所需數(shù)據(jù)到內(nèi)存數(shù)據(jù)表中,對(duì)網(wǎng)站系統(tǒng)中涉及到的每個(gè)模板文件進(jìn)行解析,從中提取組件信息并計(jì)算組件結(jié)果,將其記錄到內(nèi)存數(shù)據(jù)表中;定期將內(nèi)存數(shù)據(jù)庫中數(shù)據(jù)表的數(shù)據(jù)備份到文件系統(tǒng),當(dāng)數(shù)據(jù)備份完成后,將所有數(shù)據(jù)副表中處理結(jié)束時(shí)間在備份時(shí)間前的記錄全部刪除,在內(nèi)存數(shù)據(jù)庫出現(xiàn)異常時(shí)重啟內(nèi)存數(shù)據(jù)庫時(shí),從文件系統(tǒng)恢復(fù)數(shù)據(jù),并對(duì)所有數(shù)據(jù)副表中的記錄,將其處理開始時(shí)間、處理結(jié)束時(shí)間置空,通知數(shù)據(jù)變更處理模塊有哪些數(shù)據(jù)副表還有待處理的記錄。17.如權(quán)利要求16所述的網(wǎng)站更新實(shí)時(shí)發(fā)布方法,其特征在于還包括獲取由數(shù)據(jù)庫觸發(fā)器反饋的變更數(shù)據(jù),并將這種變更與內(nèi)存數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行比對(duì)計(jì)算的操作,進(jìn)而判斷此次更新是否需要更新頁面。18.如權(quán)利要求17所述的網(wǎng)站更新實(shí)時(shí)發(fā)布方法,其特征在于判斷是否更新頁面的操作包括接受來自數(shù)據(jù)庫觸發(fā)器的變更請(qǐng)求;從該數(shù)據(jù)副表中讀取上述記錄;將上述記錄結(jié)合內(nèi)存數(shù)據(jù)庫模塊中的數(shù)據(jù)記錄進(jìn)行比對(duì)計(jì)算,將需要更新的信息組織成對(duì)應(yīng)的消息寫入消息隊(duì)列;向發(fā)布消息生成模塊提交消息隊(duì)列。19.如權(quán)利要求18所述的網(wǎng)站更新實(shí)時(shí)發(fā)布方法,其特征在于還包括以下操作從該數(shù)據(jù)表中讀取上述記錄時(shí),將數(shù)據(jù)表中這些記錄的處理開始時(shí)間標(biāo)記為當(dāng)前時(shí)間;以及記錄處理完畢后,向數(shù)據(jù)庫標(biāo)記記錄的處理結(jié)束時(shí)間。20.如權(quán)利要求18所述的網(wǎng)站更新實(shí)時(shí)發(fā)布方法,其特征在于所述比較的操作具體為將所述記錄按"欄目類型"、"模板類型"、"欄目模板類型"、"稿件類型"四種類型加以區(qū)分,每種類型下按增加、刪除、修改三種操作進(jìn)行處理分析,判斷這條記錄是否會(huì)產(chǎn)生發(fā)布消息,如果會(huì)則生成對(duì)應(yīng)的消息加入消息隊(duì)列。21.如權(quán)利要求20所述的網(wǎng)站更新實(shí)時(shí)發(fā)布方法,其特征在于發(fā)布具體操作為對(duì)消息隊(duì)列中的每條消息,重新組織成網(wǎng)站實(shí)際發(fā)布程序可以理解的消息格式,傳送給發(fā)布程序,實(shí)現(xiàn)頁面發(fā)布。全文摘要本發(fā)明涉及一種網(wǎng)站更新實(shí)時(shí)發(fā)布的方法及系統(tǒng),屬于電子信息
技術(shù)領(lǐng)域
。本發(fā)明所述的方法包括為數(shù)據(jù)表建立觸發(fā)器;實(shí)時(shí)監(jiān)控?cái)?shù)據(jù)表中的數(shù)據(jù),當(dāng)數(shù)據(jù)變更時(shí),進(jìn)行觸發(fā);判斷是否更新頁面;如更新,將更新后的數(shù)據(jù)傳送給網(wǎng)站發(fā)布程序,實(shí)現(xiàn)頁面發(fā)布。本發(fā)明在不改變網(wǎng)站內(nèi)部原有生產(chǎn)流程的基礎(chǔ)上,對(duì)生產(chǎn)流程中改變的數(shù)據(jù)進(jìn)行捕捉,判斷這些改變的數(shù)據(jù)需要更新哪些頁面,進(jìn)而產(chǎn)生更新頁面的消息,從而實(shí)現(xiàn)無需人工干預(yù)的全自動(dòng)頁面更新流程。文檔編號(hào)G06F17/30GK101770484SQ20081024707公開日2010年7月7日申請(qǐng)日期2008年12月31日優(yōu)先權(quán)日2008年12月31日發(fā)明者劉春風(fēng),吳建坪,張文斐,趙東巖申請(qǐng)人:北大方正集團(tuán)有限公司;北京方正阿帕比技術(shù)有限公司;北京大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1