国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

SaaS軟件服務(wù)基于大規(guī)模定制的數(shù)據(jù)層架構(gòu)研究*

2012-10-08 01:58:26羅小利吳清烈任鴻美
電信科學 2012年4期
關(guān)鍵詞:租戶數(shù)據(jù)表數(shù)據(jù)模型

羅小利,吳清烈,任鴻美

(東南大學電子商務(wù)系 南京211189)

1 引言

SaaS改變了傳統(tǒng)的軟件提供方式,將軟件以服務(wù)的方式通過互聯(lián)網(wǎng)提供給客戶,使得SaaS軟件服務(wù)商與客戶從售賣關(guān)系轉(zhuǎn)化為服務(wù)關(guān)系[1]。SaaS軟件服務(wù)商與客戶是一對多模式[2],所以SaaS軟件服務(wù)成功的關(guān)鍵是實現(xiàn)強大的多租戶,保證海量數(shù)據(jù)的高效性和安全性。

SaaS軟件服務(wù)商要實現(xiàn)盈利,必須把成本控制在相對較低的水平,以吸引更多的租戶。在傳統(tǒng)的信息化建設(shè)中,軟件提供商與客戶之間是一對一的關(guān)系,針對客戶特定的數(shù)據(jù)需求,只需要設(shè)計特定的一套應用程序和數(shù)據(jù)架構(gòu),就可以保證數(shù)據(jù)的安全性和高效性。在SaaS模式下,多租戶(multi tenancy)是SaaS模式的典型特征,其基本原理是在實現(xiàn)公共資源共享、數(shù)據(jù)共享的同時,保證客戶特定數(shù)據(jù)的分開[3]。因此,設(shè)計穩(wěn)定安全的數(shù)據(jù)架構(gòu),使其在多租戶模式下既可以保證租戶特定數(shù)據(jù)的隔離性、安全性,又可以使租戶最大程度地共享數(shù)據(jù)架構(gòu),是SaaS應用和推廣的一個關(guān)鍵因素。

本文首先分析SaaS軟件服務(wù)在數(shù)據(jù)層應用大規(guī)模定制的必要性,針對如何處理多租戶模式下的數(shù)據(jù)安全和共享問題對3種數(shù)據(jù)架構(gòu)設(shè)計方案進行分析和比較;接著討論共享數(shù)據(jù)庫、共享Schema架構(gòu)下可行的個性化數(shù)據(jù)擴展方案,以滿足客戶對數(shù)據(jù)的個性化需求;最后,用案例證明SaaS軟件服務(wù)基于大規(guī)模定制的數(shù)據(jù)擴展方案的可行性。

2 SaaS軟件服務(wù)基于大規(guī)模定制的數(shù)據(jù)層研究思路

在SaaS模式下,按照軟件構(gòu)件進行數(shù)據(jù)切分,租戶共享領(lǐng)域共性構(gòu)件,對這些共性構(gòu)件的存儲,比如公共的程序數(shù)據(jù)、公共配置數(shù)據(jù)等,可以在共用的存儲空間存放,而不必在每個租戶的存儲空間復制一次再進行存儲;即使是同一軟件構(gòu)件產(chǎn)生的業(yè)務(wù)數(shù)據(jù),客戶的某些屬性也是相同的,可以采用相同的數(shù)據(jù)結(jié)構(gòu)來定義。這為SaaS軟件服務(wù)在數(shù)據(jù)存儲層應用大規(guī)模定制管理理念提供了可能性。

SaaS軟件服務(wù)商面對的是眾多客戶,每個客戶根據(jù)自己的業(yè)務(wù)需要會產(chǎn)生各自獨特的數(shù)據(jù)需求,所要求的數(shù)據(jù)結(jié)構(gòu)也會有所不同,并且即使是同一客戶,其需求的數(shù)據(jù)結(jié)構(gòu)也會隨著業(yè)務(wù)變化發(fā)生變化。這就要求SaaS軟件服務(wù)商設(shè)計滿足客戶個性化需求的動態(tài)數(shù)據(jù)結(jié)構(gòu),既可以滿足客戶特定的數(shù)據(jù)需要,又可以保證客戶業(yè)務(wù)數(shù)據(jù)的隔離[4],以實現(xiàn)SaaS模式的安全性、高效性。

在數(shù)據(jù)存儲層應用大規(guī)模定制,可以有效地利用存儲空間,提高數(shù)據(jù)庫的實用性和靈活性。根據(jù)以上兩點,本文按照軟件構(gòu)件劃分數(shù)據(jù),將領(lǐng)域共性構(gòu)件的數(shù)據(jù)集中存儲在一個數(shù)據(jù)庫中,將客戶的業(yè)務(wù)數(shù)據(jù)存放在另一個數(shù)據(jù)庫中。針對客戶的業(yè)務(wù)數(shù)據(jù),比較和分析了3種數(shù)據(jù)架構(gòu),指出它們的適用范圍及優(yōu)缺點。同一軟件構(gòu)件下客戶的業(yè)務(wù)數(shù)據(jù)采用統(tǒng)一的數(shù)據(jù)結(jié)構(gòu),然而不同租戶可能有不同的數(shù)據(jù)模型要求,需要在標準數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上實現(xiàn)擴展性,以滿足不同租戶特定的需求。然而尤其在共享數(shù)據(jù)、共享Schema數(shù)據(jù)架構(gòu)下,租戶使用的是相同的數(shù)據(jù)表,一個租戶對數(shù)據(jù)結(jié)構(gòu)的修改或者擴展可能會影響其他租戶對該數(shù)據(jù)庫的使用,因此需要實現(xiàn)動態(tài)數(shù)據(jù)擴展,既滿足租戶對數(shù)據(jù)模型特定的擴展,又不會影響其他租戶的使用,從而節(jié)約了資源,降低了存儲成本,提高了SaaS軟件服務(wù)商的市場競爭力。

3 SaaS軟件服務(wù)基于大規(guī)模定制的數(shù)據(jù)層架構(gòu)設(shè)計

SaaS軟件服務(wù)商要在競爭激烈的市場環(huán)境中取得競爭優(yōu)勢,應該能夠以低成本保證每個租戶方便、快捷地使用自己的數(shù)據(jù)。在標準數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上實現(xiàn)數(shù)據(jù)模型的擴展,以滿足客戶獨特的業(yè)務(wù)需求是SaaS軟件服務(wù)能否成功推廣的關(guān)鍵所在。

3.1 SaaS軟件服務(wù)基于大規(guī)模定制的數(shù)據(jù)層整體結(jié)構(gòu)

SaaS軟件服務(wù)大規(guī)模定制的數(shù)據(jù)層整體結(jié)構(gòu)如圖1所示。

在圖1所示的框架中,公共數(shù)據(jù)庫存放的是公共數(shù)據(jù),即獨立于客戶的數(shù)據(jù),是所有租戶共享的,如公共配置數(shù)據(jù)、公共的程序數(shù)據(jù)、公共服務(wù)數(shù)據(jù)等,租戶是不能修改公共數(shù)據(jù)的。根據(jù)系統(tǒng)構(gòu)件切分數(shù)據(jù),切分的粒度可以是從系統(tǒng)、模塊逐步深入切分,以實現(xiàn)數(shù)據(jù)存儲的解耦。在某個粒度切分開來的數(shù)據(jù)存儲的上層程序不能直接訪問該數(shù)據(jù),只能通過接口來調(diào)用。公共數(shù)據(jù)的存儲可以是不同數(shù)據(jù)庫、不同表或者物理分開的數(shù)據(jù)庫等方式,由于上層程序代碼是相互獨立的,不能直接訪問,可實現(xiàn)數(shù)據(jù)存儲的完全松耦合,滿足SaaS軟件服務(wù) “按需定制,按需付費”、服務(wù)可度量等特點。

客戶數(shù)據(jù)庫存放的是客戶的業(yè)務(wù)數(shù)據(jù)、配置數(shù)據(jù)、應用服務(wù)器及數(shù)據(jù)庫管理的程序文件。在同一系統(tǒng)構(gòu)件下采用相同的數(shù)據(jù)結(jié)構(gòu),但可按照數(shù)據(jù)級進行區(qū)分,如客戶業(yè)務(wù)數(shù)據(jù)的屬性。租戶可以在標準數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上自定義需要擴展的數(shù)據(jù),以靈活、快捷地滿足客戶的個性化數(shù)據(jù)需求。

在圖1所示的框架下,數(shù)據(jù)訪問層從業(yè)務(wù)邏輯層分離出數(shù)據(jù)訪問代碼,屏蔽不同的數(shù)據(jù)存儲方式與數(shù)據(jù)存儲層進行交互。數(shù)據(jù)訪問層通過訪問公共數(shù)據(jù)庫來獲取公共數(shù)據(jù),但不可以修改公共數(shù)據(jù)。通過訪問客戶數(shù)據(jù)庫來獲取每個租戶特定的業(yè)務(wù)數(shù)據(jù),可以進行更新、查找、刪除、創(chuàng)建等操作。

3.2 數(shù)據(jù)存儲架構(gòu)選擇

SaaS模式下,多個租戶共享一個應用實例,租戶間的數(shù)據(jù)既有共享又有隔離[5],在兩者之間尋求平衡是必須考慮的一個重要因素,同時還要考慮SaaS軟件服務(wù)提供商和租戶間共同尋求的低成本、高效性因素。租戶共享的公共數(shù)據(jù)庫,不論采取何種存儲方式,均能實現(xiàn)數(shù)據(jù)存儲的松耦合,且客戶是不能修改公共數(shù)據(jù)的,所以在這里不再累述。客戶數(shù)據(jù)庫按照數(shù)據(jù)隔離和共享的程度可以劃分為以下3種數(shù)據(jù)架構(gòu)。

(1)獨立數(shù)據(jù)庫

一個租戶對應一個專門的數(shù)據(jù)庫[6~9],如圖2所示,租戶可以最大程度地按照自己的需求設(shè)計數(shù)據(jù)結(jié)構(gòu),通過元數(shù)據(jù)的描述為每個數(shù)據(jù)庫與其對應的租戶建立聯(lián)系,是實現(xiàn)數(shù)據(jù)隔離最安全的數(shù)據(jù)架構(gòu)。在這種數(shù)據(jù)模型下,租戶可以簡單方便地實現(xiàn)數(shù)據(jù)擴展,以滿足不同租戶的個性化需求。同時,數(shù)據(jù)備份也會要求使用專用的數(shù)據(jù)庫,當發(fā)生故障時,可以簡單快捷地恢復租戶的數(shù)據(jù),客戶的私有數(shù)據(jù)不會被其他客戶意外地訪問到,安全性比較高。

這種數(shù)據(jù)架構(gòu)下,一個服務(wù)器所能容納的數(shù)據(jù)庫數(shù)量會很快達到飽和,只能支持有限數(shù)量的租戶,相對其他數(shù)據(jù)架構(gòu),部署和維護成本十分高,適合對數(shù)據(jù)隔離級別要求非常高的客戶,如銀行、醫(yī)院。

(2)共享數(shù)據(jù)庫、獨立Schema

共享數(shù)據(jù)庫、獨立Schema架構(gòu)實現(xiàn)租戶的數(shù)據(jù)庫共享,但每個租戶都有一套各自不同的數(shù)據(jù)表架構(gòu),存儲在單獨的模式中,如圖3所示,一個數(shù)據(jù)庫存儲多個租戶的信息,每個租戶均有自己的一套表,這些表被包含在同一個Schema描述的表組中。這種架構(gòu)下,租戶可以相對自由地對同一Schema下的表進行新增和修改,滿足租戶特定的需求。與獨立數(shù)據(jù)庫相同,可以便捷地擴展數(shù)據(jù)模型。

在這種數(shù)據(jù)架構(gòu)下,租戶的數(shù)據(jù)在一定程度上得到了較好的隔離,每個服務(wù)器可以支撐更多的租戶,硬件成本相對降低,節(jié)約了服務(wù)器資源,經(jīng)濟實用性增強。但維護比較復雜,例如數(shù)據(jù)庫出錯,無論表里的數(shù)據(jù)是否損壞,需要恢復所有租戶的表,需要花費很長的時間。比較適用于租戶對安全級別要求比較高,且每個租戶的數(shù)據(jù)表不多的狀況。

(3)共享數(shù)據(jù)庫、共享Schema

共享數(shù)據(jù)庫、共享Schema是在同一個服務(wù)器上,以同一個數(shù)據(jù)庫、同一張表來存放租戶的數(shù)據(jù),如圖4所示。這種數(shù)據(jù)架構(gòu)下,一張表可以包含很多租戶的數(shù)據(jù)記錄,租戶之間通過ID來區(qū)分[10],因此共享程度最高,但數(shù)據(jù)隔離程度最低,相應的安全級別也較低。一個服務(wù)器可以最大程度地支撐租戶的數(shù)量,SaaS軟件服務(wù)商擁有最低的硬件成本和數(shù)據(jù)備份成本,經(jīng)濟適用性最好。

該架構(gòu)下,多個租戶共同使用一張表,租戶不能按照自己的需求隨意地修改數(shù)據(jù)結(jié)構(gòu),以避免影響其他租戶的使用,相對其他兩種架構(gòu),租戶在數(shù)據(jù)結(jié)構(gòu)上擁有的自由度不高。為了滿足每個租戶的個性化需求,SaaS軟件服務(wù)商在數(shù)據(jù)擴展、配置方面比較復雜。由于很多客戶共享一張表,數(shù)據(jù)安全方面需要花費更多的成本,以保障租戶數(shù)據(jù)的安全性,不會因為系統(tǒng)異常而被其他租戶訪問到。與共享數(shù)據(jù)庫、獨立Schema一樣,共享Schema架構(gòu)在數(shù)據(jù)維護方面比較復雜,一旦數(shù)據(jù)庫出錯,數(shù)據(jù)恢復效率比較低。這種架構(gòu)比較適合租戶對安全級別要求較低,且每個租戶數(shù)據(jù)存儲量少的情況。

3.3 數(shù)據(jù)存儲架構(gòu)的比較

上述3種方案中,每種數(shù)據(jù)架構(gòu)都有各自的優(yōu)缺點及適應范圍。表1從共享級別、隔離級別、維護級別、成本、數(shù)據(jù)擴展便利程度等方面比較了3種數(shù)據(jù)架構(gòu)[11]。

表1 數(shù)據(jù)架構(gòu)比較

從表1中可以看出,獨立數(shù)據(jù)庫共享級別最低,數(shù)據(jù)隔離、成本、維護級別最高,而共享數(shù)據(jù)庫、共享Schema架構(gòu)則相反,共享級別最高,而數(shù)據(jù)隔離最低,安全性差。獨立數(shù)據(jù)庫可以簡單便捷地實現(xiàn)數(shù)據(jù)結(jié)構(gòu)的擴展,以滿足客戶的個性化需求,并且當發(fā)生故障時可以相對簡單地恢復租戶的數(shù)據(jù),易于維護。但是獨立數(shù)據(jù)庫需要花費大量硬件成本,租戶的租金比較高。共享數(shù)據(jù)庫、共享Schema架構(gòu)下,很多租戶共用一個表,共享程度最高,相應地成本就比較低,具有很高的經(jīng)濟效益,但是數(shù)據(jù)隔離程度最低,需要花費一定的精力避免租戶數(shù)據(jù)的交叉訪問,提高數(shù)據(jù)的安全性。

SaaS軟件服務(wù)商在選擇數(shù)據(jù)架構(gòu)時要綜合考慮各種因素,如服務(wù)的客戶數(shù)量、性質(zhì)、數(shù)據(jù)的安全級別要求、經(jīng)濟成本以及技術(shù)風險等。

4 SaaS軟件服務(wù)基于大規(guī)模定制的數(shù)據(jù)擴展

在同一系統(tǒng)構(gòu)件下,客戶數(shù)據(jù)既有共同的數(shù)據(jù)結(jié)構(gòu)又有獨特的數(shù)據(jù)模型需求,僵化的、沒有可擴展的默認數(shù)據(jù)模型是無法滿足客戶個性化需求的。本文以共享數(shù)據(jù)庫、共享Schema架構(gòu)為例,在標準數(shù)據(jù)模型的基礎(chǔ)上討論數(shù)據(jù)結(jié)構(gòu)的可擴展性,以滿足租戶的特殊需求。

4.1 3種數(shù)據(jù)擴展方案

在共享數(shù)據(jù)庫、共享Schema架構(gòu)下,多個租戶共享同一數(shù)據(jù)表,對數(shù)據(jù)結(jié)構(gòu)的直接修改或者擴展會影響其他租戶的使用。在傳統(tǒng)系統(tǒng)應用中,每個客戶部署的是不同的應用案例,用戶可以定制各自的實例,增加每個客戶的擴展數(shù)據(jù),一般主要通過定制字段、預分配字段、名稱值對這3種方案實現(xiàn)數(shù)據(jù)擴展[12]。

(1)定制字段

這種方案是根據(jù)客戶的個性化需求,在數(shù)據(jù)表上添加相應的列來擴展數(shù)據(jù),是傳統(tǒng)應用中最簡單的解決方案。擴展的列只對特定的客戶有用,其他客戶在該列下的值均為null,是沒有實際意義的。從實際的角度出發(fā),這種方案非常簡單,不需要處理復雜的擴展數(shù)據(jù)追蹤。但是在SaaS模式下,若每個租戶的數(shù)據(jù)定義都在同一個表上修改,會造成表中絕大多數(shù)用戶自定義字段對其他用戶沒有任何實際意義,浪費存儲空間,甚至會嚴重破壞數(shù)據(jù)表的結(jié)構(gòu)。因此,這種方案并不適合SaaS模式下的多租戶特點。

(2)預分配字段

這種方案是指在數(shù)據(jù)表中預先設(shè)定一定數(shù)量的通用字段,類型可以設(shè)置為string,當用戶需要擴展業(yè)務(wù)數(shù)據(jù)時,可以使用其中的一個或者幾個字段,以滿足客戶的個性化需求。預分配的字段是沒有固定含義的,對于不同的租戶,這些字段保證的是沒有特定含義的數(shù)據(jù),需要建立元數(shù)據(jù)表,解釋每個租戶對預分配字段的語義和實際的數(shù)據(jù)類型。

預分配字段方案在某種程度上實現(xiàn)了數(shù)據(jù)的擴展,是實現(xiàn)租戶數(shù)據(jù)擴展的一種簡單方式,但是局限性也相當明顯:預分配字段的個數(shù)必須在系統(tǒng)設(shè)計時就確定。設(shè)計時要綜合考慮需要多少預分配字段,若預分配字段太多,就會產(chǎn)生很多空閑的空間,造成數(shù)據(jù)存取空間的浪費;若預分配字段太少,則不能實現(xiàn)租戶的數(shù)據(jù)擴展,無法靈活滿足租戶的個性化需求。SaaS軟件服務(wù)商面對的是眾多客戶,有的客戶定制字段過多,有的客戶則較少,所以這種方案對于多租戶的SaaS軟件服務(wù)實現(xiàn)數(shù)據(jù)擴展是非常困難的。

(3)名稱值對

名稱值對方案是通過客戶原數(shù)據(jù)表、擴展數(shù)據(jù)表和元數(shù)據(jù)表這3張表來描述客戶的信息,不同租戶進行字段擴展時,擴展數(shù)據(jù)表將客戶業(yè)務(wù)數(shù)據(jù)表的橫向列擴展轉(zhuǎn)化成縱向的數(shù)據(jù)集,將原數(shù)據(jù)表中的每一條擴展記錄的每一個擴展字段,都保存成一條擴展數(shù)據(jù)行,并將數(shù)據(jù)表中的記錄與元數(shù)據(jù)表中的配置記錄相關(guān)聯(lián),構(gòu)成擴展數(shù)據(jù)記錄。

客戶原數(shù)據(jù)表主要存儲的是租戶共同屬性下的業(yè)務(wù)數(shù)據(jù);擴展數(shù)據(jù)表主要存儲每個租戶擴展數(shù)據(jù)的值;元數(shù)據(jù)表主要存儲租戶擴展數(shù)據(jù)的字段名稱和存儲類型,這張表通過關(guān)鍵字聯(lián)系起來。名稱值對這種方案靈活地實現(xiàn)了數(shù)據(jù)的擴展,租戶可以根據(jù)自己的個性化需求,不斷地增減自定義數(shù)據(jù)。

名稱值對方案雖然數(shù)據(jù)擴展比較靈活,但數(shù)據(jù)處理時十分復雜,需要復雜的處理才能實現(xiàn)客戶擴展數(shù)據(jù)和原數(shù)據(jù)之間的映射,如當檢索數(shù)據(jù)時,得多次訪問元數(shù)據(jù)才能獲取所有的業(yè)務(wù)數(shù)據(jù),大大影響了數(shù)據(jù)訪問的效率。

4.2 動態(tài)數(shù)據(jù)擴展模型

SaaS軟件服務(wù)在數(shù)據(jù)存儲層采用大規(guī)模定制管理理念,可以在滿足客戶對數(shù)據(jù)模型個性化需求的基礎(chǔ)上,降低成本,提高數(shù)據(jù)訪問的效率。上面3種方案均不適合SaaS軟件服務(wù)基于大規(guī)模定制的數(shù)據(jù)擴展。據(jù)此本文設(shè)計了動態(tài)數(shù)據(jù)擴展模型,用XML文檔描述租戶的擴展數(shù)據(jù),每個租戶均對應一個XML Schema ID,以區(qū)分每個租戶的擴展數(shù)據(jù),既滿足租戶對數(shù)據(jù)擴展的需求,又不改變原用的數(shù)據(jù)結(jié)構(gòu)。當客戶需要刪除、更新擴展數(shù)據(jù)時,只需要修改自己的XML文檔即可,提高了數(shù)據(jù)操作的效率,且不會影響其他客戶的數(shù)據(jù)。動態(tài)數(shù)據(jù)結(jié)構(gòu)見表2。

表2 動態(tài)數(shù)據(jù)結(jié)構(gòu)

表 2 中 ,tenancy ID、Preset-param1、Preset-param2 等 存放的是租戶共有的數(shù)據(jù)類型,XML Schema ID存放的是租戶特有數(shù)據(jù)的地址。XML Schema的定義如下:

type="xs:string"/>

type="xs:string"/>

type="xs:string"/>

從XML Schema的描述可知,用戶可以自定義擴展數(shù)據(jù)個數(shù)、數(shù)據(jù)類型,XML具有數(shù)據(jù)語義的自解釋性,解析數(shù)據(jù)時非常方便[13]。XML Schema的視圖如圖5所示。

動態(tài)數(shù)據(jù)擴展模型在標準數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上可以靈活地實現(xiàn)擴展,以滿足客戶的個性化數(shù)據(jù)需求,并且所占的存儲空間相對較少,數(shù)據(jù)查詢、更新、刪除等操作非常簡單、高效,提高了數(shù)據(jù)訪問的效率。利用XML數(shù)據(jù)類型來存儲客戶的自定義數(shù)據(jù),對擴展數(shù)據(jù)的類型、個數(shù)都沒有限制,客戶可以根據(jù)自己的需求任意地擴展數(shù)據(jù),并且不會對其他客戶的數(shù)據(jù)產(chǎn)生影響,滿足SaaS模式的多租戶特征。因此,可以借助動態(tài)數(shù)據(jù)模型來實現(xiàn)SaaS軟件服務(wù)基于大規(guī)模定制的數(shù)據(jù)擴展。

5 SaaS軟件服務(wù)基于大規(guī)模定制的數(shù)據(jù)擴展案例

為驗證動態(tài)數(shù)據(jù)擴展模型的可行性,以SaaS軟件服務(wù)商向?qū)W校提供考試系統(tǒng)為例,討論數(shù)據(jù)的存儲結(jié)構(gòu)及對數(shù)據(jù)的主要操作。

5.1 考試系統(tǒng)數(shù)據(jù)存儲結(jié)構(gòu)

在共享數(shù)據(jù)庫、共享Schema架構(gòu)下,很多租戶共用一張表,其動態(tài)數(shù)據(jù)擴展見表3。

學校代碼為001的租戶對數(shù)據(jù)有個性化需求,需要存儲的信息為:考試地點,數(shù)據(jù)類型為string;成績上升幅度,數(shù)據(jù)類型為float。學校代碼為001,學生學號為100的租戶其對應的XML為:

/**201.xml**/

表3 考試系統(tǒng)動態(tài)數(shù)據(jù)擴展:TbUserInfo

學校代碼為002的租戶對數(shù)據(jù)有個性化需求,需要存儲的信息為:數(shù)學老師姓名,數(shù)據(jù)類型為string;職稱,數(shù)據(jù)類型為string;所屬機構(gòu),數(shù)據(jù)類型為string。學校代碼為002,學生學號為101的租戶其對應的XML為:

/**202.xml**/

5.2 數(shù)據(jù)操作

對數(shù)據(jù)的主要操作有查詢、更新、添加新屬性、刪除,學校代碼為001,學生學號為100這條記錄擴展部分的操作方法如下。

(1)數(shù)據(jù)查詢

查詢擴展數(shù)據(jù)時,可以通過以下方式:

SELECT XmlInfo.value ('/Root/ExtendParams/ExtendParam/Name',’string’)AS Name,

XmlInfo.value ('/Root/ExtendParams/ExtendParam/Value',’string’)AS Value

FROM TbUserInfo

WHERE SchoolID=001 and StudentID=100;

查詢得到的結(jié)果見表4。

表4 查詢結(jié)果

(2)數(shù)據(jù)新增

當客戶需要添加新的數(shù)據(jù)類型時,可以通過declare語句完成,如下所示:

DECLARE@XmlInfo as XML

SET@XmlInfo=’

由上可知,客戶可以根據(jù)自己的需求隨意擴展字段。

若新增一條數(shù)據(jù)記錄,則通過insert語句完成。

INSERT INTO TbUserInfo (SchoolID,SchoolName,StudentID,StudentName,Course,Grade,XmlInfo)VALUES(004,‘南京航空航天大學 ’,103,‘劉 一 ’,‘會 計 ’,92,@XmlInfo);

(3)數(shù)據(jù)修改

修改擴展數(shù)據(jù)某個屬性下的值時,通過update語句完成。

UPDATE TbUserInfo

SET XmlInfo.modify('replace value of

(/Root/ExtendParams/ExtendParam[Name="考試地點 "]/Value/text())with"教1-101"')

WHERE SchoolID=001 AND StudentID=100;

該過程將SchoolID=001 AND StudentID=100的數(shù)據(jù)的擴展文件中的Name為 “考試地點”的ExtendParam中的Value 值(原來值為:“五教 301”)變換為“教 1-101”。

(4)數(shù)據(jù)刪除

當刪除一整條數(shù)據(jù)記錄時,操作如下:

DELETE FROM TbUserInfo WHERE SchoolID=001 AND StudentID=100;

刪除擴展數(shù)據(jù)某一個屬性時,通過update語句完成。

UPDATE TbUserInfo

SET XmlInfo.modify ('delete/Root/ExtendParams/ExtendParam[1]')

WHERE SchoolID=001 AND StudentID=100;

當擴展數(shù)據(jù)類型及數(shù)據(jù)更新時,需要對其驗證,使其滿足XML Schema的定義。

從該案例可以看出,動態(tài)數(shù)據(jù)擴展模型比定制列、預分配字段、名稱值對等數(shù)據(jù)擴展方案更加靈活,所占的存儲空間相對較少,并且數(shù)據(jù)操作簡單、快捷,符合大規(guī)模定制的管理理念。借助這種模型可以實現(xiàn)SaaS的原數(shù)據(jù)表和擴展數(shù)據(jù)的集成。

6 結(jié)束語

本文首先根據(jù)系統(tǒng)構(gòu)件把存儲數(shù)據(jù)分為公共數(shù)據(jù)和客戶數(shù)據(jù),設(shè)計了SaaS軟件服務(wù)基于大規(guī)模定制的數(shù)據(jù)層架構(gòu)。針對客戶數(shù)據(jù),討論了3種數(shù)據(jù)存儲架構(gòu)的優(yōu)缺點及適用范圍。以共享數(shù)據(jù)庫、共享Schema架構(gòu)為例,按照大規(guī)模定制的管理理念,SaaS軟件服務(wù)商要滿足客戶的個性化需求,且降低成本、提供數(shù)據(jù)操作的效率,本文提出了動態(tài)數(shù)據(jù)擴展模型以實現(xiàn)數(shù)據(jù)擴展問題,適合SaaS模式的多租戶特征。

1 Chong F,Carraro G.Architecture strategies for catching the long tail.Microsoft Corporation,2006

2 Chong F,Carraro G,Wolter R.Multi-tenant data architecture.http://msdn.microsoft.com/en-us/library/aa479086.aspx

3 Ralph Mietzner,AndreasMetzger,Frank Leymann,etal.Variability modeling to support customization and deployment of multi-tenant-aware software as a service applications.Proceeding of the 2009 ICSE Workshop on Principles of Engineering Service Oriented Systems,2009

4 Aulbach S,Grust T,Jacobs D,et al.Multi-tenant database for software asaservice:schema-mapping techniques.SIGMOD,2008(7):9~12

5 Chong F,Carraro G,Wolter R.Multi-tenant data architecture.http://msdn.Microsoft.com/errus/library/aa479363.aspx,2006

6 Gao Bo,Guo Changjie,Wang Zhihu,et al.Devlop and deplop multi-tenant web-delivered solutions using IBM middlleware:part 3:resource sharing,isolation and customization in the single instance multi-tenant application.http://www.ibm.com/developworks/cn,2009

7 唐君.基于SaaS的中小企業(yè)管理軟件實現(xiàn).復旦大學碩士學位論文,2008

8 鄧偉華.SaaS應用的數(shù)據(jù)模型研究與設(shè)計.電腦編程技巧與維護,2009(8)

9 Chong F,Carraro G.抓住市場的長尾.北京:中信出版社,2006

10 Lin Huiping,Li Weiping,Wu Si.A service in education:SOA-based credit bank system, computer systems and applications.Computer Systems&Applications,2009,18(6):1~5

11 陸洪潮.SaaS模式的ERP系統(tǒng)的研究.武漢理工大學碩士學位論文,2009

12 杜佳,溫浩宇,楊朝君.SaaS數(shù)據(jù)擴展模型研究.情報雜志,2010(29):188~191

13 Rohit Khare,Adem Pifkin.Special Feature:XML-a door to automated Web application.IEEE Internet Computing,1997,4(1):78~80

猜你喜歡
租戶數(shù)據(jù)表數(shù)據(jù)模型
湖北省新冠肺炎疫情數(shù)據(jù)表
黨員生活(2020年2期)2020-04-17 09:56:30
基于列控工程數(shù)據(jù)表建立線路拓撲關(guān)系的研究
面板數(shù)據(jù)模型截面相關(guān)檢驗方法綜述
加熱爐爐內(nèi)跟蹤數(shù)據(jù)模型優(yōu)化
電子測試(2017年12期)2017-12-18 06:35:36
基于MVC模式的多租戶portlet應用研究*
圖表
租戶是大爺
特別文摘(2014年17期)2014-09-18 01:31:21
企業(yè)多租戶云存儲平臺的設(shè)計與實現(xiàn)
基于VSL的動態(tài)數(shù)據(jù)表應用研究
河南科技(2014年24期)2014-02-27 14:19:25
SaaS模式下多租戶數(shù)據(jù)比較存儲模式研究
宁波市| 平定县| 团风县| 嘉祥县| 江口县| 鹤峰县| 永仁县| 贵溪市| 清镇市| 称多县| 苍山县| 中超| 缙云县| 晋江市| 大竹县| 永德县| 会东县| 西吉县| 大足县| 肥西县| 原平市| 饶阳县| 青海省| 久治县| 射洪县| 嘉鱼县| 崇明县| 罗甸县| 九台市| 三台县| 邢台市| 隆子县| 鸡泽县| 阿拉善左旗| 彭阳县| 清水河县| 阆中市| 温宿县| 海晏县| 安仁县| 邳州市|