2013-12-09 227 views
0

目前正在開展預訂管理系統。這是一個多租戶應用程序,將有大約50個租戶。多租戶數據架構

我們正在計劃舉辦一些託管服務提供商像winasp.net等這ASP.Net MVC4/SQL Server 2008申請(尚未決定)

Business Model Diagram

enter image description here

有用戶喜歡超級管理員的多層次,租戶管理員,客戶服務,醫生在上述圖片中描述。

爲了實現這一點的數據庫模型,我們選擇在提到Shared Database with Shared Schema方法MSDN Multitenant Data Architecture

意味着我們增加了一個列TenantId in each table

我們共享數據庫&共享模式決定是基於以下

  1. 沒有租戶(50 +)

  2. 易租戶

  3. 之間有着共同的元數據移動大租戶(一/二)成一個單獨的實例,如果承租人有更多的數據量

我們現在正在進行中,我們還怕以下問題需要解決

  1. 數據安全 - >每次需要通過/檢查TenantId

  2. 備份單個租戶 - >需要編寫一個SQL查詢備份和考慮外鍵/自動增量備份在

  3. 數據量頭痛。單個數據庫存儲所有租戶的數據,查詢數據很慢

  4. 索引(不知道我們是否需要索引的所有TenantId列在每個表中,因爲它涉及到所有WHERE

還有其他選項,如

  • 單數據庫/房客
  • 共用數據庫,獨立模式

而且This Article增添了更多的一些方法

我們希望得到我們的當前設計一些建議/更好的設計。

  • 新辦法符合上述業務圖

  • 租戶管理/客戶服務用戶必須能夠看到子租戶記錄

  • 查詢外特性

  • 租戶之間共享元數據共享

  • 租戶特定的元數據

  • 特定於租戶的數據域(可選)

  • 輕鬆備份

+0

我覺得這太寬泛了,不能在一個問題上回答。將這些問題分解成與實現相關的編程問題的具體問題可能是明智的。 –

+0

這個問題,我提出了一些最基本的信息/建議,以幫助我以正確的方式實施。在閱讀了很多文章後,只要更高層次的建議就足夠了,並且沒有找到我在此提出的正確線索。 – Billa

+0

我不能提供200賞金,因爲沒有賞金鍊接可用,因爲它關閉:( – Billa

回答

2

在我看來,你應該重新審視你有一個共享的數據庫的決定。如果由於機密性的原因您需要嚴格分離數據,則應該有獨立的數據庫。

索引(不知道我們是否需要索引的所有TenantId列中的每個表,
因爲它涉及所有WHERE

是的,你將不得不在每個表中的索引TenantId,包括它在所有的查詢中,

另外,它看起來像你在分析需求之前已經決定使用SQL Server,可能有更多自然的解決方案來存儲多租戶數據,即RavenDB,它將使分片/備份要簡單得多,我不婉轉開始討論關於nosql等 - 只是建議應該從需求開始,然後選擇合適的技術。

+0

我只有SQL服務器知識。不知道RavenDB :( – Billa

+0

TenantId應該是'簇或非簇'索引? – Billa

+0

我想'TenantId'應該與行鍵一起成爲聚集索引的一部分。 –