專利名稱:一種提高數(shù)據(jù)處理效率的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)處理技術(shù),特別涉及一種提高數(shù)據(jù)處理效率的方法。
背景技術(shù):
數(shù)據(jù)庫表格的規(guī)模越來越大,每張表格中的記錄數(shù)通常達(dá)到數(shù)萬條,甚至更多。在對數(shù)據(jù)庫數(shù)據(jù)進(jìn)行數(shù)據(jù)處理時,各個數(shù)據(jù)配置的前臺采用多窗口技術(shù)(MDI)的方式,前臺會同時打開多張表格。另外,數(shù)據(jù)庫在網(wǎng)絡(luò)應(yīng)用中,存在多個客戶端同時操作一張表格的情況。
對于多窗口數(shù)據(jù)庫處理,目前,瀏覽窗口與數(shù)據(jù)庫的對應(yīng)關(guān)系參見圖1,圖1為現(xiàn)有技術(shù)查詢?yōu)g覽窗口與數(shù)據(jù)庫對應(yīng)關(guān)系示意圖。如圖1所示,前臺瀏覽窗口101與數(shù)據(jù)庫表102是直接對應(yīng)的。數(shù)據(jù)處理中,查詢操作是一項重要的操作,查詢到數(shù)據(jù)后,才能對該數(shù)據(jù)進(jìn)行下一步的刪除、修改、排序等操作。
對數(shù)據(jù)進(jìn)行查詢操作的基本過程參見圖2,圖2為現(xiàn)有技術(shù)數(shù)據(jù)查詢流程示意圖。如圖2所示,前臺瀏覽窗口202直接向數(shù)據(jù)庫201查詢記錄,數(shù)據(jù)庫201將查詢到的記錄203直接返回給前臺瀏覽窗口202。
可見,一般普通的數(shù)據(jù)查詢,只是簡單的對數(shù)據(jù)庫中表的直接操作,當(dāng)數(shù)據(jù)量非常大時,操作速度慢。如前臺保存所有的數(shù)據(jù),在查詢的時候,可以減少與數(shù)據(jù)庫交互的次數(shù),但數(shù)據(jù)量非常大時,要占用非常大的前臺內(nèi)存資源。所以,在數(shù)據(jù)量非常大的時候,目前的方法對數(shù)據(jù)庫進(jìn)行數(shù)據(jù)處理的效率很低,然而,當(dāng)前在通信、金融等各種領(lǐng)域的應(yīng)用中數(shù)據(jù)量越來越大,這使得如何提高數(shù)據(jù)處理效率成為一個急需解決的問題。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的目的在于提供一種提高數(shù)據(jù)處理效率的方法,能夠提高數(shù)據(jù)庫數(shù)據(jù)處理的速度和效率。
為達(dá)到上述目的,本發(fā)明的技術(shù)方案具體是這樣實(shí)現(xiàn)的一種提高數(shù)據(jù)處理效率的方法,該方法包括以下步驟1)在后臺為每個前臺瀏覽窗口開辟對應(yīng)內(nèi)存塊,依瀏覽窗口需要顯示的數(shù)據(jù)量建立數(shù)據(jù)塊,每個內(nèi)存塊分別暫存每個瀏覽窗口在數(shù)據(jù)庫中對應(yīng)的數(shù)據(jù)塊及其在數(shù)據(jù)庫中相關(guān)的共N個數(shù)據(jù)塊;2)在前臺瀏覽窗口顯示的數(shù)據(jù)移動時,如果瀏覽窗口需要顯示的數(shù)據(jù)塊及其相關(guān)的數(shù)據(jù)塊全部在內(nèi)存塊中,則在內(nèi)存塊中移動,如果瀏覽窗口需要顯示的數(shù)據(jù)塊及其相關(guān)的數(shù)據(jù)塊部分在內(nèi)存塊中,則將數(shù)據(jù)庫中瀏覽窗口需要顯示的數(shù)據(jù)塊及其相關(guān)的數(shù)據(jù)塊保存到內(nèi)存塊中,替換內(nèi)存塊原有的數(shù)據(jù)塊;3)前臺向后臺發(fā)送數(shù)據(jù)操作命令,對前臺瀏覽窗口對應(yīng)的內(nèi)存塊中的數(shù)據(jù)庫數(shù)據(jù)進(jìn)行操作;4)前臺瀏覽窗口操作完畢,關(guān)閉該窗口,同時用該瀏覽窗口對應(yīng)的內(nèi)存塊的數(shù)據(jù)庫數(shù)據(jù)更新數(shù)據(jù)庫。
所述前臺瀏覽窗口開辟對應(yīng)內(nèi)存塊可以為每個前臺瀏覽窗口開辟一個對應(yīng)內(nèi)存塊。
所述在數(shù)據(jù)庫中相關(guān)的數(shù)據(jù)塊可以為在數(shù)據(jù)庫中相鄰的數(shù)據(jù)塊。
該方法可以進(jìn)一步包括設(shè)置索引數(shù)組工廠,根據(jù)前臺瀏覽窗口對內(nèi)存塊大小的要求,生產(chǎn)相應(yīng)大小的索引數(shù)組,前臺瀏覽窗口通過對應(yīng)的索引數(shù)組來映射具體的內(nèi)存塊,索引數(shù)組以內(nèi)存塊大小為索引。
該方法也可以進(jìn)一步包括,當(dāng)一索引數(shù)組不夠用時,向工廠申請更大型號的索引數(shù)組,將該舊數(shù)組交給工廠來回收,工廠將收到的廢棄索引數(shù)組保留,當(dāng)收到新的開辟內(nèi)存申請時,將該索引數(shù)組重新提交給后臺使用。
該方法還可以進(jìn)一步包括,當(dāng)需要的內(nèi)存塊大小超過預(yù)定的大小時,后臺收到申請,無法找到合適的索引數(shù)組時,則刪除最不常用的內(nèi)存塊,建立新的索引數(shù)組。
其中,步驟1)所述開辟內(nèi)存塊的過程可以進(jìn)一步包括以下步驟11)前臺瀏覽窗口向后臺發(fā)送開辟內(nèi)存塊命令,包括數(shù)據(jù)庫表單名和一個數(shù)據(jù)塊包含的記錄數(shù);12)后臺收到該命令后,在指定的數(shù)據(jù)庫表單中查找出對應(yīng)數(shù)據(jù)塊及其相鄰數(shù)據(jù)塊共N個數(shù)據(jù)塊,將N個數(shù)據(jù)塊保存到該前臺瀏覽窗口對應(yīng)的內(nèi)存塊中;13)后臺向前臺返回瀏覽窗口需要顯示的數(shù)據(jù)塊中的記錄。
步驟2)可以進(jìn)一步包括21)查詢記錄過程a、前臺瀏覽窗口向后臺發(fā)送數(shù)據(jù)庫表單名和用戶指定的數(shù)據(jù)查詢信息;b、后臺根據(jù)這些信息,從索引表中讀取相關(guān)記錄索引,根據(jù)記錄索引判斷要查詢的記錄是否在前臺瀏覽窗口對應(yīng)的內(nèi)存塊中,如果在,則將該記錄所在的數(shù)據(jù)塊返回給前臺,執(zhí)行步驟c;否則,到數(shù)據(jù)庫中查找,將包含要查詢記錄的數(shù)據(jù)塊返回前臺瀏覽窗口,執(zhí)行步驟d;c、判斷包含要查詢記錄的數(shù)據(jù)塊相關(guān)的數(shù)據(jù)塊是否在前臺瀏覽窗口對應(yīng)的內(nèi)存塊中,如果在,則執(zhí)行步驟e;否則,在數(shù)據(jù)庫中查找相關(guān)的數(shù)據(jù)塊;d、用包含要查詢記錄的數(shù)據(jù)塊及相關(guān)的數(shù)據(jù)塊,更新前臺瀏覽窗口對應(yīng)的內(nèi)存塊;e、前臺用收到的查詢記錄刷新瀏覽窗口;22)增加記錄過程a、前臺瀏覽窗口向后臺發(fā)送數(shù)據(jù)庫表單名、增加記錄命令和增加記錄的數(shù)據(jù);b、后臺收到命令后根據(jù)這些條件,在內(nèi)存塊的數(shù)據(jù)中插入指定數(shù)據(jù),成功后獲得對應(yīng)的記錄索引,將該記錄索引添加到記錄索引表;
c、后臺向前臺發(fā)送記錄增加成功消息、當(dāng)前記錄數(shù)和刷新瀏覽窗口通知;d、前臺收到步驟c中所述消息后,刷新該瀏覽窗口數(shù)據(jù);23)刪除記錄過程a、前臺瀏覽窗口向后臺發(fā)送數(shù)據(jù)庫表名、刪除命令和記錄索引;b、后臺收到命令后根據(jù)這些條件,在內(nèi)存塊的數(shù)據(jù)中刪除指定數(shù)據(jù);c、后臺向前臺發(fā)送刪除成功消息、當(dāng)前記錄數(shù)和刷新瀏覽窗口通知;d、前臺收到步驟c中所述消息后,刷新當(dāng)前瀏覽窗口的數(shù)據(jù);24)修改記錄過程a、前臺瀏覽窗口向后臺發(fā)送數(shù)據(jù)庫表名、修改命令、記錄索引和修改后的記錄數(shù)據(jù);b、后臺收到命令后根據(jù)這些條件,在內(nèi)存塊的數(shù)據(jù)中修改指定數(shù)據(jù);c、后臺向前臺發(fā)送修改成功消息和刷新瀏覽窗口通知;d、前臺收到步驟c中所述消息后,刷新當(dāng)前窗口的數(shù)據(jù)。
步驟2)還可以進(jìn)一步包括在增加記錄或刪除記錄或修改記錄過程中,對于包含增加或刪除的記錄的前臺非發(fā)起操作的瀏覽窗口,刷新數(shù)據(jù)。
步驟2)還可以進(jìn)一步包括對數(shù)據(jù)庫中排序數(shù)據(jù)的刷新方法為重新使用排序條件進(jìn)行數(shù)據(jù)庫排序,生產(chǎn)新的記錄索引表,并通知前臺刷新數(shù)據(jù)。
步驟2)還可以進(jìn)一步包括對數(shù)據(jù)庫中排序數(shù)據(jù)的刷新方法為將新增的記錄追加到數(shù)據(jù)庫表尾,不進(jìn)行排序,用戶發(fā)現(xiàn)后下發(fā)排序命令和排序條件重新排序。
該方法可以進(jìn)一步包括為每條數(shù)據(jù)庫記錄設(shè)置一個唯一標(biāo)識的資源號(ResID),在數(shù)據(jù)庫中以資源號為記錄索引建立記錄索引表。
該方法可以進(jìn)一步包括當(dāng)用戶按翻頁鍵的速度特別快或長按不放時,根據(jù)用戶按鍵的次數(shù)計算出最后定位的頁面,先在當(dāng)前瀏覽窗口對應(yīng)的內(nèi)存塊中查找該頁面對應(yīng)的數(shù)據(jù),如果找不到,則到數(shù)據(jù)庫中查找該頁面對應(yīng)的數(shù)據(jù)。
該方法還可以進(jìn)一步包括當(dāng)用戶滾屏到頁面的頂部或底部時,顯示選擇頁面按鈕,根據(jù)用戶選擇先在當(dāng)前瀏覽窗口對應(yīng)的內(nèi)存塊中查找對應(yīng)的數(shù)據(jù),如果找不到,則到數(shù)據(jù)庫中查找對應(yīng)的數(shù)據(jù)。
由上述的技術(shù)方案可見,本發(fā)明的這種提高數(shù)據(jù)處理效率的方法,實(shí)現(xiàn)簡便、節(jié)省系統(tǒng)資源,能夠提高數(shù)據(jù)處理的速度和效率。
圖1為現(xiàn)有技術(shù)查詢?yōu)g覽窗口與數(shù)據(jù)庫對應(yīng)關(guān)系示意圖;圖2為現(xiàn)有技術(shù)數(shù)據(jù)查詢示意圖;圖3為本發(fā)明一個較佳實(shí)施例中前臺瀏覽窗口與后臺數(shù)據(jù)庫表對應(yīng)關(guān)系示意圖;圖4為圖3所示實(shí)施例的滑動窗口機(jī)制示意圖;圖5為圖3所示實(shí)施例的索引數(shù)據(jù)工廠結(jié)構(gòu)示意圖;圖6為圖3所示實(shí)施例的數(shù)據(jù)查詢示意圖;圖7為圖3所示實(shí)施例的查詢記錄的流程圖;圖8-1為圖3所示實(shí)施例中瀏覽的數(shù)據(jù)塊及相鄰數(shù)據(jù)塊不超出內(nèi)存塊時翻頁示意圖;圖8-2為圖3所示實(shí)施例中瀏覽的數(shù)據(jù)塊相鄰的數(shù)據(jù)塊超出內(nèi)存塊時翻頁示意圖。
具體實(shí)施例方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)表達(dá)的更加清楚明白,下面結(jié)合實(shí)施例和附圖,對本發(fā)明進(jìn)一步詳細(xì)說明。
本發(fā)明主要采用滑動窗口的技術(shù)來提高數(shù)據(jù)處理效率。
首先,在后臺為前臺瀏覽窗口開辟對應(yīng)內(nèi)存塊,參見圖3,圖3為本發(fā)明一個較佳實(shí)施例中前臺瀏覽窗口與后臺數(shù)據(jù)庫表對應(yīng)關(guān)系示意圖。本實(shí)施例中,在后臺300為每個前臺瀏覽窗口301開辟了一個對應(yīng)的內(nèi)存塊302,也可以多個瀏覽窗口對應(yīng)一個內(nèi)存塊或一個瀏覽窗口對應(yīng)多個內(nèi)存塊,以一個瀏覽窗口需要顯示的數(shù)據(jù)量為一個數(shù)據(jù)塊,每個內(nèi)存塊302暫存瀏覽窗口在數(shù)據(jù)庫303中對應(yīng)的數(shù)據(jù)塊及其在數(shù)據(jù)庫303中相鄰的共N個數(shù)據(jù)塊。其中,各內(nèi)存塊302中的數(shù)據(jù)可以重合也可以不重合,如圖3中內(nèi)存塊1和內(nèi)存塊2之間存在數(shù)據(jù)重合,它們和數(shù)據(jù)塊n之間沒有數(shù)據(jù)重合。后臺各內(nèi)存塊302的大小可以根據(jù)具體情況制定,后臺內(nèi)存塊越大,訪問數(shù)據(jù)庫的次數(shù)就越少,同時為了防止出現(xiàn)較大的資源開銷,一般3~5個數(shù)據(jù)塊為宜,以下實(shí)施例的內(nèi)存塊中存儲了3個數(shù)據(jù)塊瀏覽窗口對應(yīng)的數(shù)據(jù)塊,和與瀏覽窗口對應(yīng)的數(shù)據(jù)塊相鄰的上、下數(shù)據(jù)塊,這里也可以是其他與瀏覽窗口對應(yīng)數(shù)據(jù)塊相關(guān)的數(shù)據(jù)塊,比如數(shù)據(jù)庫表中某個域內(nèi)容相同的數(shù)據(jù)塊。
在前臺瀏覽窗口顯示的數(shù)據(jù)移動時,如果瀏覽窗口需要顯示的數(shù)據(jù)塊及其相鄰的數(shù)據(jù)塊全部在內(nèi)存塊中,則在內(nèi)存塊中移動,如果瀏覽窗口需要顯示的數(shù)據(jù)塊及其相鄰的數(shù)據(jù)塊不全部在內(nèi)存塊中,則將數(shù)據(jù)庫中瀏覽窗口需要顯示的數(shù)據(jù)塊及其相鄰的數(shù)據(jù)塊保存到內(nèi)存塊中,替換內(nèi)存塊原有的數(shù)據(jù)塊。
也就是說,內(nèi)存塊302存儲的數(shù)據(jù)根據(jù)前臺瀏覽窗口301的移動在數(shù)據(jù)庫表303中移動,形成了映射數(shù)據(jù)庫數(shù)據(jù)的滑動窗口。如圖4所示,圖4為圖3所示實(shí)施例的滑動窗口機(jī)制示意圖,前臺瀏覽窗口401對應(yīng)的后臺內(nèi)存塊402中存儲的數(shù)據(jù)塊1~3是數(shù)據(jù)庫表403中的數(shù)據(jù)集1,當(dāng)前臺瀏覽窗口401需要的數(shù)據(jù)超出了數(shù)據(jù)塊1~3,而需要的數(shù)據(jù)在數(shù)據(jù)集2中時,則后臺內(nèi)存塊402改為存儲數(shù)據(jù)集2。
然后,通過前臺向后臺發(fā)送數(shù)據(jù)操作命令,對前臺瀏覽窗口對應(yīng)的內(nèi)存塊中的數(shù)據(jù)庫數(shù)據(jù)進(jìn)行操作。
最后,前臺瀏覽窗口操作完畢,關(guān)閉該窗口,同時用該瀏覽窗口對應(yīng)的內(nèi)存塊的數(shù)據(jù)庫數(shù)據(jù)更新數(shù)據(jù)庫。
這樣,當(dāng)前臺需要數(shù)據(jù)的時候,不用直接訪問數(shù)據(jù)庫表,而是通過前臺瀏覽窗口301向后臺300發(fā)送數(shù)據(jù)操作命令,對前臺瀏覽窗口301對應(yīng)的內(nèi)存塊302中的數(shù)據(jù)庫數(shù)據(jù)進(jìn)行操作;前臺瀏覽窗口301操作完畢,關(guān)閉該窗口,用該窗口301對應(yīng)的內(nèi)存塊302的數(shù)據(jù)庫數(shù)據(jù)更新數(shù)據(jù)庫。只對此內(nèi)存塊進(jìn)行操作,能夠大大提高數(shù)據(jù)處理的速度和效率。當(dāng)在前臺打開多個瀏覽窗口301時,一個瀏覽窗口301對應(yīng)一個內(nèi)存塊302,瀏覽窗口301之間不相互影響。
上述方案在實(shí)現(xiàn)過程中,后臺中會生成大量的內(nèi)存塊,其數(shù)量等于所有前臺中打開瀏覽窗口數(shù)的總和,因此消耗的內(nèi)存,隨著前臺打開瀏覽窗口的增多,會有若干個大大小小的內(nèi)存塊,另外在數(shù)據(jù)的增刪時,還會有大量的內(nèi)存增刪操作。為了提供內(nèi)存使用的效率,減少內(nèi)存碎片的產(chǎn)生,本實(shí)施例在后臺建造一個內(nèi)存塊索引數(shù)組工廠,它負(fù)責(zé)內(nèi)存塊的生成和回收。其結(jié)構(gòu)參見圖5,圖5為圖3所示實(shí)施例的索引數(shù)據(jù)工廠結(jié)構(gòu)示意圖。索引數(shù)組工廠500根據(jù)瀏覽窗口對內(nèi)存塊大小的需要,生產(chǎn)相應(yīng)大小的索引數(shù)組501,每個索引數(shù)組501對應(yīng)一個內(nèi)存塊502。當(dāng)某個后臺因?yàn)樵黾訑?shù)據(jù)導(dǎo)致原來的索引數(shù)組不夠用時,直接向工廠申請更大型號的索引數(shù)組,將原來的舊數(shù)組交給工廠來回收,工廠收到廢棄的數(shù)組后,并不馬上刪除,而是保留起來,如果收到新開辟內(nèi)存塊申請,就可以將這些數(shù)組重新提交給后臺使用。為了保證內(nèi)存塊使用的總量不會無限的增大,當(dāng)總的內(nèi)存塊超過一定數(shù)量,如果收到后臺申請,但無法找到合適的數(shù)組,必須更新時,就刪除最不常用的內(nèi)存塊,建立新的索引數(shù)組。
采用這種方式的好處是,理想狀態(tài)下,當(dāng)系統(tǒng)運(yùn)行一段時間后,就會有足夠多的索引數(shù)組來滿足后臺的需要,不會再有不斷的內(nèi)存申請和刪除的操作,另外在整個處理過程中,后臺也不必為了增加一個索引而進(jìn)行一系列的內(nèi)存增刪操作。
因?yàn)閷τ跀?shù)據(jù)庫記錄的操作非常頻繁,考慮到數(shù)據(jù)庫的可移植性,本發(fā)明為每一條記錄設(shè)置了一個唯一標(biāo)識的資源號-ResID;使用此ResID可屏蔽不同數(shù)據(jù)庫使用記錄號來訪問數(shù)據(jù)庫的差異性,可減少數(shù)據(jù)庫移植的工作量。因此,所有的表格必須以它為索引,并在數(shù)據(jù)庫中建立相關(guān)的索引表,建立索引表可以提高記錄定位和查詢的速度。這個ResID是在添加記錄時,有后臺程序?yàn)槊織l記錄設(shè)置的。除了本發(fā)明設(shè)置的ResID,系統(tǒng)中的下面2個對象也可以用來標(biāo)識記錄a、Sybase數(shù)據(jù)庫中的記錄號,由數(shù)據(jù)庫缺省分配;b、Orac1e數(shù)據(jù)庫中的行內(nèi)部地址(RowID)也由數(shù)據(jù)庫缺省分配;其中記錄號和RowID都是數(shù)據(jù)庫自動分配的,可能會對操作的性能有所提高,但因?yàn)閷儆诓煌臄?shù)據(jù)庫,必須進(jìn)行統(tǒng)一的封裝;而ResID是自己定義的數(shù)據(jù),與使用的數(shù)據(jù)庫系統(tǒng)無關(guān),在數(shù)據(jù)庫支持上不會帶來額外的麻煩,因此本發(fā)明實(shí)施例使用ResID。
以下具體說明對數(shù)據(jù)庫數(shù)據(jù)進(jìn)行操作的過程首先,通過前述的過程為前臺瀏覽窗口開辟一個內(nèi)存塊前臺瀏覽窗口向后臺發(fā)送開辟內(nèi)存塊命令、數(shù)據(jù)庫表單名和前臺瀏覽窗口需要顯示的記錄數(shù)。后臺收到該命令后,找出數(shù)據(jù)庫中瀏覽窗口顯示的數(shù)據(jù)塊、數(shù)據(jù)庫中該數(shù)據(jù)塊相鄰的上、下共3個數(shù)據(jù)塊;最后,后臺向前臺返回瀏覽窗口需要顯示的數(shù)據(jù)塊中的記錄。
然后,就可以對瀏覽窗口上的數(shù)據(jù)庫記錄進(jìn)行操作。
其中,查詢記錄操作參見圖6,圖6為圖3所示實(shí)施例的數(shù)據(jù)查詢示意圖。后臺內(nèi)存塊604中存儲了數(shù)據(jù)庫601中的3個數(shù)據(jù)塊數(shù)據(jù),其中一個數(shù)據(jù)塊數(shù)據(jù)顯示在前臺瀏覽窗口602上。當(dāng)用戶查詢時,執(zhí)行以下步驟a、前臺瀏覽窗口602向后臺發(fā)送查詢記錄命令;b、后臺在內(nèi)存塊604的數(shù)據(jù)塊中查詢指定數(shù)據(jù),如果要查詢的數(shù)據(jù)不在內(nèi)存塊604中,則到數(shù)據(jù)庫601中查找,查找到數(shù)據(jù)后,后臺向前臺發(fā)送查詢記錄603;c、前臺瀏覽窗口602顯示查詢結(jié)果。
由于查詢記錄操作是數(shù)據(jù)庫操作中一個重要的操作,下面詳細(xì)說明查詢記錄操作過程。圖7為圖3所示實(shí)施例的查詢記錄的流程圖,其具體流程包括以下步驟執(zhí)行步驟701,前臺瀏覽窗口向后臺發(fā)送包含數(shù)據(jù)庫表單名和用戶指定的數(shù)據(jù)查詢命令。
步驟702,后臺根據(jù)查詢命令,從索引表中讀取相關(guān)記錄索引(ResID),根據(jù)記錄索引判斷要查詢的記錄是否在前臺瀏覽窗口對應(yīng)的內(nèi)存塊中,如果要查詢的記錄在該內(nèi)存塊中,則執(zhí)行步驟703;否則,執(zhí)行步驟706。
步驟703,將該記錄所在的數(shù)據(jù)塊N返回給前臺。
步驟704,判斷包含要查詢記錄的數(shù)據(jù)塊相鄰的數(shù)據(jù)塊是否在內(nèi)存中,如果在,則執(zhí)行步驟709,否則執(zhí)行步驟705。
步驟705,向數(shù)據(jù)庫發(fā)送查詢該記錄的命令,在數(shù)據(jù)庫中查找到要查詢記錄的數(shù)據(jù)塊的相鄰上、下數(shù)據(jù)塊,執(zhí)行步驟708。
步驟706,向數(shù)據(jù)庫發(fā)送查詢命令,在數(shù)據(jù)庫中查找到要查詢記錄的數(shù)據(jù)塊N及其相鄰上、下數(shù)據(jù)塊N+1、N-1。
步驟707,將查詢到記錄所在的數(shù)據(jù)塊N返回給前臺。
步驟708,用包含查詢到記錄數(shù)據(jù)塊N及相鄰上、下數(shù)據(jù)塊N+1、N-1,更新前臺瀏覽窗口對應(yīng)的內(nèi)存塊。
步驟709,前臺用收到的查詢記錄刷新瀏覽窗口;增加記錄操作包括以下步驟a、前臺瀏覽窗口向后臺發(fā)送數(shù)據(jù)庫表單名、增加記錄命令和增加記錄的數(shù)據(jù);b、后臺收到命令后根據(jù)這些條件,拼裝SQL語句,在內(nèi)存塊的數(shù)據(jù)集中插入指定數(shù)據(jù),成功后獲得對應(yīng)記錄的ResID,將該ResID添加到索引數(shù)組;c、后臺向前臺發(fā)送記錄增加成功消息、當(dāng)前記錄數(shù),和刷新瀏覽窗口通知;d、前臺收到c中所述消息后,刷新該瀏覽窗口數(shù)據(jù)。
刪除記錄操作包括以下步驟a、前臺瀏覽窗口向后臺發(fā)送數(shù)據(jù)庫表名、刪除命令和記錄索引(ResID);b、后臺收到命令后根據(jù)這些條件,拼裝SQL語句,在數(shù)據(jù)庫中刪除指定數(shù)據(jù);c、后臺向前臺發(fā)送刪除成功消息、當(dāng)前記錄數(shù)和刷新瀏覽窗口通知;d、前臺c中所述消息后,刷新當(dāng)前瀏覽窗口的數(shù)據(jù)。
修改記錄操作包括以下步驟a、前臺瀏覽窗口向后臺發(fā)送數(shù)據(jù)庫表名、修改命令、記錄索引(ResID)和修改后的記錄數(shù)據(jù);b、后臺收到命令后根據(jù)這些條件,拼裝SQL語句,在數(shù)據(jù)庫中修改指定數(shù)據(jù);c、后臺向前臺發(fā)送修改成功消息和刷新瀏覽窗口通知;d、前臺收到c中所述消息后,刷新當(dāng)前窗口的數(shù)據(jù)。
在增加記錄或刪除或修改記錄過程中,在刷新發(fā)起操作瀏覽窗口的同時,可以同時刷新其他包含增加記錄或刪除或修改記錄的瀏覽窗口,方法為遍歷所有非發(fā)起操作瀏覽窗口的索引數(shù)組,當(dāng)檢查到增加或刪除的記錄在前臺非發(fā)起增加操作瀏覽窗口中時,則刷新該前臺瀏覽窗口的數(shù)據(jù)。對于增加記錄后窗口的刷新,可以采用追加的方法,新增記錄的ResID添加在索引數(shù)組的尾部,這樣可以大大提高更新索引數(shù)組的效率。
在記錄增加,后臺需要對索引表進(jìn)行刷新,但是排序的索引有一定的特殊性,當(dāng)數(shù)據(jù)集按照制定的條件排序后,它們的索引--ResID,很可能是無序的,因此在這種情況下,要把新的ResID正確的插入索引表中是比較困難的,可采用下述兩種方式一、重新使用排序條件進(jìn)行數(shù)據(jù)庫排序,生產(chǎn)新的索引表,并通知前臺刷新數(shù)據(jù)。該方法,處理簡單,但增加后臺的處理工作量,刷新數(shù)組的速度比較慢,但是前臺可能感覺不到。
二、將新增的記錄追加到索引表尾,不進(jìn)行排序,這種方法處理最簡單,用戶發(fā)現(xiàn)后可以下發(fā)條件重新排序。
另外,前臺瀏覽窗口翻頁操作的過程參見圖8-1、圖8-2,圖8-1為圖3所示實(shí)施例中瀏覽的數(shù)據(jù)塊及相鄰數(shù)據(jù)塊不超出內(nèi)存塊時翻頁示意圖、圖8-2為圖3所示實(shí)施例中瀏覽的數(shù)據(jù)塊相鄰的數(shù)據(jù)塊超出內(nèi)存塊時翻頁示意圖。
如圖8-1所示,如果前臺瀏覽窗口811需要顯示的記錄為100條,當(dāng)前對應(yīng)的數(shù)據(jù)塊是內(nèi)存塊812中的數(shù)據(jù)塊1,每個數(shù)據(jù)塊的記錄也是100條,在向下翻頁時,顯示的數(shù)據(jù)超出數(shù)據(jù)塊1,則前臺瀏覽窗口811對應(yīng)內(nèi)存塊812中的數(shù)據(jù)塊2,將數(shù)據(jù)塊2的數(shù)據(jù)返回給前臺,這種情況不對數(shù)據(jù)庫813進(jìn)行操作。
如圖8-2所示,如果當(dāng)前前臺瀏覽窗口811對應(yīng)的是內(nèi)存塊812中的數(shù)據(jù)塊2,在向下翻頁時,顯示的數(shù)據(jù)超出數(shù)據(jù)塊2,則前臺瀏覽窗口811對應(yīng)內(nèi)存塊812中的數(shù)據(jù)塊3,將數(shù)據(jù)塊3的數(shù)據(jù)返回給前臺,由于此時與數(shù)據(jù)塊3相鄰的數(shù)據(jù)塊4不在內(nèi)存塊812中,所以刪除與數(shù)據(jù)塊3不相鄰的數(shù)據(jù)塊1的數(shù)據(jù),同時向數(shù)據(jù)庫813發(fā)出數(shù)據(jù)請求,將數(shù)據(jù)塊4的數(shù)據(jù)保存到內(nèi)存塊812中。
如果此時向上翻頁,則前臺瀏覽窗口811對應(yīng)內(nèi)存塊812中的數(shù)據(jù)塊2,將數(shù)據(jù)塊2的數(shù)據(jù)返回給前臺,同時在內(nèi)存塊812中刪除數(shù)據(jù)塊4,將數(shù)據(jù)塊1添加到數(shù)據(jù)塊2前面,其結(jié)果如圖8-1。
在實(shí)際應(yīng)用中,當(dāng)用戶按翻頁鍵的速度特別快或長按不放時,根據(jù)用戶按鍵的次數(shù)計算出最后定位的頁面,到數(shù)據(jù)庫中查找該頁面對應(yīng)的數(shù)據(jù)塊及其相鄰的數(shù)據(jù)塊。當(dāng)用戶滾屏到頁面的頂部或底部時,顯示選擇頁面按鈕,根據(jù)用戶選擇在數(shù)據(jù)庫中查找對應(yīng)的數(shù)據(jù)塊及其相鄰的數(shù)據(jù)塊。
由上述的實(shí)施例可見,本發(fā)明的這種提高數(shù)據(jù)處理效率的方法,實(shí)現(xiàn)簡便、節(jié)省系統(tǒng)資源,能夠提高數(shù)據(jù)處理的速度和效率。
權(quán)利要求
1.一種提高數(shù)據(jù)處理效率的方法,其特征在于,該方法包括以下步驟1)在后臺為前臺瀏覽窗口開辟對應(yīng)內(nèi)存塊,依瀏覽窗口需要顯示的數(shù)據(jù)量建立數(shù)據(jù)塊,每個內(nèi)存塊分別暫存每個瀏覽窗口在數(shù)據(jù)庫中對應(yīng)的數(shù)據(jù)塊及其在數(shù)據(jù)庫中相關(guān)的共N個數(shù)據(jù)塊;2)在前臺瀏覽窗口顯示的數(shù)據(jù)移動時,如果瀏覽窗口需要顯示的數(shù)據(jù)塊及其相關(guān)的數(shù)據(jù)塊全部在內(nèi)存塊中,則在內(nèi)存塊中移動,如果瀏覽窗口需要顯示的數(shù)據(jù)塊及其相關(guān)的數(shù)據(jù)塊部分在內(nèi)存塊中,則將數(shù)據(jù)庫中瀏覽窗口需要顯示的數(shù)據(jù)塊及其相關(guān)的數(shù)據(jù)塊保存到內(nèi)存塊中,替換內(nèi)存塊原有的數(shù)據(jù)塊;3)前臺向后臺發(fā)送數(shù)據(jù)操作命令,對前臺瀏覽窗口對應(yīng)的內(nèi)存塊中的數(shù)據(jù)庫數(shù)據(jù)進(jìn)行操作;4)前臺瀏覽窗口操作完畢,關(guān)閉該窗口,同時用該瀏覽窗口對應(yīng)的內(nèi)存塊的數(shù)據(jù)庫數(shù)據(jù)更新數(shù)據(jù)庫。
2.如權(quán)利要求1所述的方法,其特征在于,所述前臺瀏覽窗口開辟對應(yīng)內(nèi)存塊為每個前臺瀏覽窗口開辟一個對應(yīng)內(nèi)存塊。
3.如權(quán)利要求1所述的方法,其特征在于所述在數(shù)據(jù)庫中相關(guān)的數(shù)據(jù)塊為在數(shù)據(jù)庫中相鄰的數(shù)據(jù)塊。
4.如權(quán)利要求1所述的方法,其特征在于該方法進(jìn)一步包括設(shè)置索引數(shù)組工廠,根據(jù)前臺瀏覽窗口對內(nèi)存塊大小的要求,生產(chǎn)相應(yīng)大小的索引數(shù)組,前臺瀏覽窗口通過對應(yīng)的索引數(shù)組來映射具體的內(nèi)存塊,索引數(shù)組以內(nèi)存塊大小為索引。
5.如權(quán)利要求4所述的方法,其特征在于該方法進(jìn)一步包括,當(dāng)一索引數(shù)組不夠用時,向工廠申請更大型號的索引數(shù)組,將該舊數(shù)組交給工廠來回收,工廠將收到的廢棄索引數(shù)組保留,當(dāng)收到新的開辟內(nèi)存塊申請時,將該索引數(shù)組重新提交給后臺使用。
6.如權(quán)利要求4或5所述的方法,其特征在于該方法進(jìn)一步包括,當(dāng)需要的內(nèi)存塊大小超過預(yù)定的大小時,后臺收到申請,無法找到合適的索引數(shù)組時,則刪除最不常用的內(nèi)存塊,建立新的索引數(shù)組。
7.如權(quán)利要求1所述的方法,其特征在于步驟1)所述開辟內(nèi)存塊的過程進(jìn)一步包括以下步驟11)前臺瀏覽窗口向后臺發(fā)送開辟內(nèi)存塊命令,包括數(shù)據(jù)庫表單名和一個數(shù)據(jù)塊包含的記錄數(shù);12)后臺收到該命令后,在指定的數(shù)據(jù)庫表單中查找出對應(yīng)數(shù)據(jù)塊及其相鄰數(shù)據(jù)塊共N個數(shù)據(jù)塊,將N個數(shù)據(jù)塊保存到該前臺瀏覽窗口對應(yīng)的內(nèi)存塊中;13)后臺向前臺返回瀏覽窗口需要顯示的數(shù)據(jù)塊中的記錄。
8.如權(quán)利要求1所述的方法,其特征在于所述步驟2)進(jìn)一步包括21)查詢記錄過程a、前臺瀏覽窗口向后臺發(fā)送數(shù)據(jù)庫表單名和用戶指定的數(shù)據(jù)查詢信息;b、后臺根據(jù)這些信息,從索引表中讀取相關(guān)記錄索引,根據(jù)記錄索引判斷要查詢的記錄是否在前臺瀏覽窗口對應(yīng)的內(nèi)存塊中,如果在,則將該記錄所在的數(shù)據(jù)塊返回給前臺,執(zhí)行步驟c;否則,到數(shù)據(jù)庫中查找,將包含要查詢記錄的數(shù)據(jù)塊返回前臺瀏覽窗口,執(zhí)行步驟d;c、判斷包含要查詢記錄的數(shù)據(jù)塊相關(guān)的數(shù)據(jù)塊是否在前臺瀏覽窗口對應(yīng)的內(nèi)存塊中,如果在,則執(zhí)行步驟e;否則,在數(shù)據(jù)庫中查找相關(guān)的數(shù)據(jù)塊;d、用包含要查詢記錄的數(shù)據(jù)塊及相關(guān)的數(shù)據(jù)塊,更新前臺瀏覽窗口對應(yīng)的內(nèi)存塊;e、前臺用收到的查詢記錄刷新瀏覽窗口;22)增加記錄過程a、前臺瀏覽窗口向后臺發(fā)送數(shù)據(jù)庫表單名、增加記錄命令和增加記錄的數(shù)據(jù);b、后臺收到命令后根據(jù)這些條件,在內(nèi)存塊的數(shù)據(jù)中插入指定數(shù)據(jù),成功后獲得對應(yīng)的記錄索引,將該記錄索引添加到記錄索引表;c、后臺向前臺發(fā)送記錄增加成功消息、當(dāng)前記錄數(shù)和刷新瀏覽窗口通知;d、前臺收到步驟c中所述消息后,刷新該瀏覽窗口數(shù)據(jù);23)刪除記錄過程a、前臺瀏覽窗口向后臺發(fā)送數(shù)據(jù)庫表名、刪除命令和記錄索引;b、后臺收到命令后根據(jù)這些條件,在內(nèi)存塊的數(shù)據(jù)中刪除指定數(shù)據(jù);c、后臺向前臺發(fā)送刪除成功消息、當(dāng)前記錄數(shù)和刷新瀏覽窗口通知;d、前臺收到步驟c中所述消息后,刷新當(dāng)前瀏覽窗口的數(shù)據(jù);24)修改記錄過程a、前臺瀏覽窗口向后臺發(fā)送數(shù)據(jù)庫表名、修改命令、記錄索引和修改后的記錄數(shù)據(jù);b、后臺收到命令后根據(jù)這些條件,在內(nèi)存塊的數(shù)據(jù)中修改指定數(shù)據(jù);c、后臺向前臺發(fā)送修改成功消息和刷新瀏覽窗口通知;d、前臺收到步驟c中所述消息后,刷新當(dāng)前窗口的數(shù)據(jù)。
9.如權(quán)利要求8所述的方法,其特征在于,所述步驟2)進(jìn)一步包括在增加記錄或刪除記錄或修改記錄過程中,對于包含增加或刪除的記錄的前臺非發(fā)起操作的瀏覽窗口,刷新數(shù)據(jù)。
10.如權(quán)利要求8所述的方法,其特征在于,所述步驟2)進(jìn)一步包括對數(shù)據(jù)庫中排序數(shù)據(jù)的刷新方法為重新使用排序條件進(jìn)行數(shù)據(jù)庫排序,生產(chǎn)新的記錄索引表,并通知前臺刷新數(shù)據(jù)。
11.如權(quán)利要求8所述的方法,其特征在于,所述步驟2)進(jìn)一步包括對數(shù)據(jù)庫中排序數(shù)據(jù)的刷新方法為將新增的記錄追加到數(shù)據(jù)庫表尾,不進(jìn)行排序,用戶發(fā)現(xiàn)后下發(fā)排序命令和排序條件重新排序。
12.如權(quán)利要求8所述的方法,其特征在于該方法進(jìn)一步包括為每條數(shù)據(jù)庫記錄設(shè)置一個唯一標(biāo)識的資源號(ResID),在數(shù)據(jù)庫中以資源號為記錄索引建立記錄索引表。
13.如權(quán)利要求1所述的方法,其特征在于,該方法進(jìn)一步包括當(dāng)用戶按翻頁鍵的速度特別快或長按不放時,根據(jù)用戶按鍵的次數(shù)計算出最后定位的頁面,先在當(dāng)前瀏覽窗口對應(yīng)的內(nèi)存塊中查找該頁面對應(yīng)的數(shù)據(jù),如果找不到,則到數(shù)據(jù)庫中查找該頁面對應(yīng)的數(shù)據(jù)。
14.如權(quán)利要求1所述的方法,其特征在于,該方法進(jìn)一步包括當(dāng)用戶滾屏到頁面的頂部或底部時,顯示選擇頁面按鈕,根據(jù)用戶選擇,先在當(dāng)前瀏覽窗口對應(yīng)的內(nèi)存塊中查找對應(yīng)的數(shù)據(jù),如果找不到,則到數(shù)據(jù)庫中查找對應(yīng)的數(shù)據(jù)。
全文摘要
本發(fā)明公開了一種提高數(shù)據(jù)處理效率的方法,該方法包括以下步驟1)在后臺為前臺瀏覽窗口開辟對應(yīng)內(nèi)存塊,依瀏覽窗口需要顯示的數(shù)據(jù)量建立數(shù)據(jù)塊,每個內(nèi)存塊分別暫存每個瀏覽窗口對應(yīng)數(shù)據(jù)庫中N個數(shù)據(jù)塊;2)在前臺瀏覽窗口顯示的數(shù)據(jù)移動時,如果瀏覽窗口需要顯示的數(shù)據(jù)塊及其相關(guān)的數(shù)據(jù)塊全部在內(nèi)存塊中,則在內(nèi)存塊中移動,否則,將數(shù)據(jù)庫中瀏覽窗口需要顯示的數(shù)據(jù)塊及其相關(guān)數(shù)據(jù)塊保存到內(nèi)存塊中,替換內(nèi)存塊原有的數(shù)據(jù)塊;3)前臺向后臺發(fā)送數(shù)據(jù)操作命令,對數(shù)據(jù)庫數(shù)據(jù)進(jìn)行操作;4)操作完畢,用對應(yīng)的內(nèi)存塊的數(shù)據(jù)庫數(shù)據(jù)更新數(shù)據(jù)庫。本發(fā)明方法,實(shí)現(xiàn)簡便、節(jié)省系統(tǒng)資源,能夠提高數(shù)據(jù)處理的速度和效率。
文檔編號G06F17/30GK1538324SQ0310987
公開日2004年10月20日 申請日期2003年4月16日 優(yōu)先權(quán)日2003年4月16日
發(fā)明者毅 宋, 宋毅, 陳江明, 堯浩, 杜華坤 申請人:華為技術(shù)有限公司