2017-05-03 25 views
2

我有一個關於數據庫和性能的問題,所以讓我來解釋一下情況。多個數據庫,或總是限制查詢

要構建的應用程序具有以下設置: 在該組下面有用戶的組。 數據/文件位置(用於搜索)估計一個羣組可以輕鬆達到一百萬個「搜索」條件。

現在,組可以永遠看看對方的數據,用戶只能看到屬於他們組的數據。

他們唯一應該有的共同點是,有些地方發送錯誤日誌(可能甚至沒有必要)。

現在在這種情況下,您是否會爲每個組創建一個新的數據庫,或者始終使用查詢限制您的搜索結果,這會將某些用戶組標識考慮在內?

現在我的想法是創建一個新的數據庫,因爲你不需要限制你的查詢,每一次,它會保持搜索結果通過較低(?),但是真正必要或甚至,甚至在超過一百萬條記錄上,「where groupid = 1」的速度足夠快,不會注意到性能下降。

+1

只有這些條件,我會創建一個包含少數幾個表的數據庫。這實際上是如何設計使用關係數據庫的。 –

+0

如果您沒有高度邏輯分離的監管/標準/顯式客戶要求,則將所有數據保存在單個數據庫中。 – Shadow

回答

3

這是一個常規的多租戶SaaS架構問題,已經詳細討論過,並且解決方案總是根據您的具體情況而有所不同。下面是本次討論,我將只是因爲它的所有鏈接的,而不是複製粘貼的一個例子是值得一讀:Multi-tenant PHP SaaS - Separate DB's for each client, or group them?

此外,我想補充一些高層次的考慮:

  • 對於存儲用戶數據是否有任何法律要求?一些企業在監管環境中運營,他們不允許將數據存儲在共享環境中,這在金融和醫療行業中很常見。
  • 您是否會爲所有用戶提供相同的安全性(登錄方法,數據存儲加密),備份/恢復服務,地理位置冗餘和正常運行時間保證?
  • 是否有任何用戶願意支付額外的費用來將其數據存儲在單獨的環境中?
  • 是否有任何用戶可能具有與您將提供的標準產品不兼容的要求?如果是的話,你會盡量適應他們?請注意,偶爾會有一些大客戶出現並提供大量現金用於特殊待遇。
  • 什麼是獨立環境?它是單獨的數據庫,單獨的虛擬機,單獨的物理機器,還是客戶管理的機器?
  • 你的應用程序的哪些部分是每個環境的一部分(硬件配置,網絡配置,數據庫,源代碼,二進制文件,加密證書等)?
  • 是否會有一些重度用戶在您的應用程序中產生負載,從而對較小用戶的性能產生負面影響?
  • 如果您在一個環境中爲所有用戶服務,那麼您是否有可能在未來爲某些客戶創建單獨的環境?如果是的話,這將影響您放置共享數據的位置,例如配置數據(如稅率和匯率數據等)。

我希望這會有所幫助。

+0

謝謝你的回答,它給了我一個很好的見解,說明爲什麼我們應該有,或者至少支持這些事情,我會討論選項和原因。 我無法通過搜索找到您鏈接的線索,也非常感謝您的幫助。 –

+0

不客氣,很樂意提供幫助。搜索解決方案的問題是爲問題尋找正確的搜索條件,在這種情況下可能並不明顯。 – Matty

1

性能不是真正的問題,維護和數據安全性是。如果你有很多數據庫,你將需要更多的維護。不僅備份而且連接字符串,修補程序,發佈時的模式更新等。多個數據庫也表明你也會有多個PHP站點。隨着團隊數量的增長,這將逐漸變得更加昂貴。

如果您有一個數據庫,那麼您需要確保每個查詢都包含組ID,然後才能運行。

如果您仔細選擇索引和約束條件,那麼數據庫表格可能非常非常大。如果你正在對非常大的表執行聯接,那麼它會很慢,但是一個簡單的查找,你在組列上的索引應該足夠快。

如果您要共享一個數據庫,您是否曾經將其移出一個組?如果這是可能性,那麼現在拆分數據庫。如果你要有一個PHP站點,那麼我會推薦一個帶有組列的單個數據庫。