2014-06-06 407 views
0

我必須在j2ee中開發一個多租戶SaaS應用程序,並從Iaas和PaaS開始實施三個雲模型,我選擇openshack with openshift起源。 對SaaS應用程序的第一準則是多租戶,我知道有3種方法來實現它 - 單獨的數據庫 - 共享數據庫,不同的模式 - 共享數據庫,共享模式 我這裏迷路,因爲像很多框架ATHENA,ORM就像休眠一樣,還有TOPLINK。我需要幫助來了解實現多租戶Java應用程序的最佳方法。J2EE多租戶SaaS應用程序

回答

1

我喜歡共享數據庫共享模式方法 - 廣義上說,每個表都有一個org_id列,每個查詢都以當前用戶org_id作爲過濾器運行。

我喜歡這種方式,因爲你可以分片數據庫根據每個租戶大小

我會完全跳過一個ORM平衡巨大的租戶小租戶,而不必自定義比例,太容易亂七八糟的東西多租戶部署,並使用MyBatis解決方案,這樣可以對查詢進行驗證和審覈,因爲它們都集中在少數地方而不是遍佈整個代碼。

如果你真的需要一個ORM,我知道Hibernate自帶了its own support,但我不喜歡圖書館在特定的數據結構上強制我,因爲它帶走了靈活性。只要確保獲得會話的唯一方法就是自動添加租約,如果這是手動過程,則很容易讓開發人員陷入困境。

你可以找到很多的資源,在這裏不同的方法一定的成本效益分析http://msdn.microsoft.com/en-us/library/aa479086.aspx

+0

「只要確保只有這樣,才能自動獲得一個會話中添加租賃,太容易把事情搞得一團糟了開發者如果是一個手動過程「。 - 請您詳細說明 –

+0

通常開發人員會去EntityManager(JPA)或SessionFactory(Hibernate)或SqlSessionFactoryBuilder(MyBatis),或者你有什麼。然後他們得到一個聲明,如果他們走這條路線,他們必須添加所有聲明'和租者=:tenantid',他們必須從會話中獲得租戶並通過它。太多的失敗點:將它包裝到一個對象中,該對象允許創建只有強制注入tenant子句的statement/query/object,以使開發人員不得不記住它。 –

+0

感謝您澄清:) –