2012-06-21 39 views
4

我是目前爲特定人羣組織開發專用SaaS服務的團隊成員之一。 我對PHP和mySQL有所瞭解,所以我正在這些平臺上開發它。將在雲上部署並在多個國家發佈。多組織SaaS mySQL設置?

我特地到數據庫中的分離組織/主用戶的角度想看看你們的想法。

當SaaS的管理髮票和其他許多敏感信息,這將是MySQL服務器上發佈它的最佳工藝? IVE想到了以下選擇:

1)具有在單個表的單個數據庫中的所有信息,並通過一個組織識別行分離。 - 看起來很安全,並且在有幾千用戶和10,000行時可能會很慢?

2)具有單個數據庫,但與用戶的ID例如分離表。 '1000_invoices' - 再次可能會更快但不安全。

3)對每個組織註冊和用於訪問數據庫中的特定用戶和數據庫名稱創建單獨的數據庫存儲在會話/餅乾嗎?每個組織的用戶。

無論如何,我想知道你們的想法將是最好的選擇嗎?如果不是以上那麼你有什麼建議?爲什麼?也有關於安全的任何事情將不勝感激。以前從未與大型多組織應用程序合作過。 在此先感謝!

回答

8

我過去開發了大量的SaaS應用程序,我們發現大型「公共」SaaS服務(如KashFlow,可能是Salesforce®)使用的「單一應用程序部署,單一數據庫」設置沒有使很有道理。這裏的原因:

  • 數1:客戶與公司的機密信息會想要保證他們的數據更「安全」的,它更容易時,他們的數據超出了應用層劃分爲使這些承諾。
  • 不同的客戶端有時候希望自己的軟件應用定製的給他們,如自己額外的數據庫字段,不同的登錄界面視覺設計,或者不同的(或自定義)系統「模塊」 - 具有不同的應用程序實例使這成爲可能
  • 它也使縮放更容易,至少在開始時。通過將單個客戶端的應用程序配置到與其他服務器分離的自己的服務器上來實現負載均衡更加容易,而對於單個應用程序,這意味着您需要花費更長的時間開發它以使其可擴展。
  • 數據庫主鍵更易於使用。客戶可能會開始問這樣的問題,爲什麼他們的「客戶ID」值,每個時間,而不是500遞增1。
  • 如果你有客戶遍佈世界各地,它更容易提供另一個國家的部署(其擁有本地服務器和數據庫服務器),而不是在國外部署一個巨大的應用程序,或者迫使用戶使用數千英里之外的服務器間的連接(即緩慢+滯後)連接。

有缺點,如管理數百,甚至數千的數據庫,除了應用軟件部署額外的管理負擔,但這並不會改變程序代碼的廣闊,簡化使它值得。此外,使用一堆shell腳本可以輕鬆實現配置和部署的自動化。

+0

感謝您的回答大衛,我想我會去與單獨的數據庫/組織選項。你如何推薦數據庫的詳細信息(數據庫,登錄等)被髮送?當登錄設置爲會話變量? – Anthony1234

+0

使用PHP,我可以在會話狀態下保持瞬態。數據庫詳細信息(如連接字符串)是該網站的屬性,而不是用戶(因爲它是一個每個數據庫每個客戶端的站點),因此只需將其粘貼到站點中的靜態Configuration.php文件中即可。 – Dai

+0

對不起,我以爲你的意思是一個整體的網站和一個每個組織的數據庫。所以每個用戶登錄後會在會話中設置它們的特定數據庫,然後該站點是他們的信息,直接來自他們的特定數據庫。沒有單獨的文件每個組織?你認爲哪個更好?那不是那麼容易嗎?可以自動化。 – Anthony1234