[摘要] 本文通過介紹Multi-Tenant并分析SaaS(Software as a Service)框架下Multi-Tenant(多租戶)應用的數據個性化需求的問題,提出并評估數據個性化的實施方案,最后討論了方案的應用及適用條件。
[關鍵詞] SaaS; Multi-Tenant; 數據個性化
doi : 10 . 3969 / j . issn . 1673 - 0194 . 2011 . 23. 032
[中圖分類號]TP391 [文獻標識碼]A [文章編號]1673 - 0194(2011)23- 0064- 01
一個SaaS框架下的成熟大型的Multi-Tenant應用系統不僅要滿足客戶功能方面的需求,還要關注客戶數據信息的多樣化以及他們對數據的變化需求。本文探討如何滿足不同客戶的數據個性化需求問題。
1數據庫隔離與共享方案
1.1獨享數據庫
每個租戶使用獨立的數據庫,可滿足租戶各自的需求。這種方案數據隔離性好,但租戶數量不斷增加帶來的高額成本對于運營商來說是相當大的負擔。
1.2共享數據庫,獨立數據結構
租戶共享一個數據庫,每個數據庫可支持更多的租戶,每個租戶擁有自己的數據結構,就可以滿足租戶多樣化的需求。但在涉及不同租戶間的數據統計時會有一定困難。
1.3共享數據結構
租戶共享一個數據庫,一種數據結構,這樣硬件及維護成本是最低的,而且每個數據庫所支持的租戶數量也是最多的。
對于大多數企業來說,這種模式使企業信息化成本降到最低,是很好的選擇。本文對數據表的方案分析也是基于這種模式來進行的。
2數據表實現方案
2.1定制追加字段
當租戶數據需求有變化時就在數據表上增加相應的字段。這種數據延伸方式最簡單,只要租戶有字段需求變化,就直接在原表中進行相應字段的更改。如果數據庫是租戶獨享的,那么追加字段方式可以接受,并不會影響其他租戶。但SaaS框架下的Multi-Tenant應用若允許每個租戶增加自定義字段,就會嚴重破壞表結構,影響其他租戶。
2.2預分配字段
預分配字段就是在表中預先分配一定數量的字段,當租戶需要擴展字段時就可以使用這些預先分配的字段。如果表中只預分配1個整型字段,而租戶需要兩個整型字段怎么辦?如果預分配字段設計太多就會造成數據庫膨脹,同時也可能造成無意義的字段,形成浪費。
2.3擴展關聯模式
擴展關聯就是增設一個存放需要擴展的字段的表,同時增設一個存放擴展數據的表,這樣三表關聯就能滿足不同租戶的擴展需求(如圖1所示)。
在擴展字段表中所配置的擴展數據與原業務數據表中的字段TenantID是相對應的;擴展數據表中的DataID與原業務數據表中的主鍵NO字段是相對應的;擴展字段表中的ConfigID與擴展數據表中配置擴展項是相對應的。例如,租戶0001針對goods數據定義了兩個擴展數據101(Int型的SingleUnit字段)和102(Str型的From字段),與租戶0001的原業務數據行1對應的就會有兩條擴展數據1001(SingleUnit :8)和1002(From :上海)。
擴展關聯方式解決了租戶的自定義擴展字段。租戶每增加一種自定義字段就會在擴展字段表中增加一條擴展記錄,同時,與原業務數據表對應的行也會增加一條擴展數據到擴展數據表中。這樣不會造成數據庫空間的浪費,也會很好地滿足租戶的數據擴展需求。
3總結
定制追加字段、預分配字段和擴展關聯是解決數據個性化需求問題可配置的3種方案。從可擴展性、靈活性、空間利用率等方面看,擴展關聯模式是最優的方案,但其操作復雜性、數據統計、關聯查詢等方面沒有定制追加字段模式優越。如果租戶數量較少,擴展定制需求不大,就可以采用定制追加字段和預分配字段方式;但隨著租戶數量不斷擴大以及他們對個性化字段需求的不斷變化,就應考慮采用擴展關聯方式來降低成本,從而達到更高的可適用性。
主要參考文獻
[1] 葉偉. 互聯網時代的軟件革命——SaaS架構設計[M]. 北京:電子工業出版社,2009.
[2] Dan Ma. The Business Model of “Software-As-A-Service”[C] // IEEE International Conference on Services Computing(SCC),2007.
[3] Jim Zucco. Benefits of a Software as a Service Model[EB/OL]. http://searchnetworking.techtarget.com/generic/0,295582,sid7_gci1164670,00.html.