第三章 可調性軟體框架之設計
3.2 強化 Force.com Universal Table 關聯效能
國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
34
由於LINQ 具有延遲執行,所以 All 方法中的條件會在最後真正執行查詢時才使 用,而之後繼承EFRepository 的 Entity 的 Repository 也都先串接 All 方法,如此應用程 式開發者只要使用一般的Repository 使用方法就可以不用理會 MTA 特性。
3.2 強化 Force.com Universal Table 關聯效能
本節將提出若接受資料表的鍵值使用Guid,那在 Universal Table 關聯效能上可以有很 好的提升的方法。
Force.com 提出使用 Indexes 資料表來間接彌補 Universal Table Layout 無法設定索 引而造成資料搜尋低落的問題。在使用關聯式資料庫觀念開發的應用程式中,有許多 索引的應用是來自於資料表之間的關聯,例如線上購物中會員搜尋其擁有的訂單就會 使用索引來增加速度,其關聯如【圖3.8】,資料範例如【圖 3.9】。
圖3.8 會員、訂單關聯圖
圖3.9 會員、訂單資料範例
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
35
但若使用 Universal Table Layout,資料將會儲存在 Data 資料表,其中屬於訂單的 會員編號欄位儲存在Value2。因為訂單的會員編號欄位為外來鍵,所以資料會複製一 份儲存於Indexes,如下圖所示。
圖3.10 會員、訂單於 Force.com Universal Table 資料範例
當應用程式要由會員資料取得其訂單資料時,就會拿著訂單資料的值『1』去 Indexes 找,獲得 GUID 欄位值為 Guid_B 及 Guid_C 的資料,然後再去 Data 取出所要 的資料。這在資料量大時,確實可以有效提升速度,彌補沒有索引的缺點。但畢竟還 是使用間接的方式取得資料,並且資料新增或異動時還會增加維護Indexes 資料表的成 本。
在許多應用程式的案例中,較多狀況是 Entity 只有被另一個 Entity 所擁有,也就 是說一個Entity 被兩個以上 Entity 所擁有的狀況相對較少。因此本研究藉由這現象為 Data 資料表加入一個 ForeignGUID 的欄位,並設定 GUID 欄位對 ForeignGUID 做一對 多自我關聯,如下圖所示。因此GUID 與 ForeignGUID 都具有關聯式資料庫索引。
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
36
圖3.11 改良 Force.com Universal Table Data 資料表自我關聯圖
在此設定下,應用程式設計團隊需要知道哪些 Entity 使用這種方式關聯。應用程 式必須將資料寫入ForeignGUID,用這種方式連結的 Entity 就不再使用原本邏輯資料 表的關聯欄位,而是使用GUID 及 ForeignGUID 做關聯,轉換後邏輯概念如【圖 3.12】,範例資料如【圖 3.13】。
圖3.12 Data 自我關聯之邏輯資料表概念圖
圖3.13 Data 自我關聯 Data 資料範例
‧
【圖3.14】範例模型來分析,若完全使用 ForeignGUID 的方式來關聯,而不使用 Force.com 提出的方式,綠色線條表示可以雙向使用索引,黃色表示單向,綠色表示單 向但通常使用不支援索引的方向不多。雖然有些關聯不能獲得ForeignGUID 的索引,
但這些部分還是可以使用Force.com 提出的方式,兩者搭配使用
‧
ASP.NET MVC 框架為基礎來搭配可調性 Model 層的設計。在本框架 Controller 設計中 設計一個MtaController,應用程式中的 Controller 皆繼承 MtaController,其主要提供三 項功能,分別為:
1. 方便取用 Repository 的機制。
2. 導向到租戶 Private View 的機制。
3. 常用的 Action 例如 Index、Create、Update、Detail、Delete 及 JSON 相關等等。
MtaController 類別圖如下圖所示。
圖3.15 MtaController 類別圖
其中 repo property 為提供用來存放 Entity 的 Repository,而 GetTenantRepository 方 法提供傳入Entity 名稱以回傳 Entity 的 Repository,PrivateView 方法則用來代替
ASP.NET MVC 中的 View 方法,可以將使用租戶自訂的 View,這部分的設計會在下 一節說明。其它Action 提供制式的 CRUD,除了可以讓 MTA Application Designer 撰寫 Controller 時直接呼叫,另一個很重要的功用,就是提供產生制式化擁有 CRUD Action 的Controller,來使用租戶自行新增的 Entity。