簡體   English   中英

共享的多租戶MySQL數據庫中的可伸縮性

[英]Scalability in shared multi-tenant MySQL database

我正在為大量租戶設計基於Web的通用CRM應用程序。 用戶(租戶)在線注冊以使用該應用程序。 最初,不會有那么多用戶,但是將來會有可能。

我想使用單個共享的MySQL數據庫。 由於選擇的方案和將來的功能集成,將不可能為每個租戶創建單獨的數據庫。 編程將使用PHP。

但是,我應該如何解決數據可伸縮性問題:

  1. 如果表中的行超過表的大小怎么辦? 如何解決這個問題?
  2. 如果我使用自動遞增BIGINT主鍵,例如用於“聯系人”表。 在達到BIGINT的最大值之后會發生什么?
  3. 在真正的大型數據表中使用外鍵約束是否是最佳實踐? 如果使用或不使用,它將如何影響應用程序的性能?
  4. MySQL是否適合此類應用程序?
  5. Zoho CRM的多租戶數據庫技術是什么?

MySQL是相當不錯的比例 ,即使有巨大的表。 基本上,您可以將數據庫放在更大,功能更強大的服務器上,以處理需求。 以我的經驗,它通常受RAM限制。

一旦該技術開始變得冒險,你可以通過創建數據庫的讀副本向外擴展。 基本上,這些是主數據庫的只讀副本,這些副本與主數據庫連續同步。 在您的應用程序中,使用兩個不同的數據庫連接。 第一個連接到一個只讀副本,並用於所有SELECT語句。 另一個連接是您的主數據庫,該數據庫將用於所有INSERT,UPDATE和DELETE語句。 由於許多應用程序執行的SELECT比其他任何操作都要多,並且可以創建的只讀副本數量幾乎沒有限制,這將極大地擴展您的潛在規模。

在MySQL中,我傾向於為所有租戶使用一個數據庫,並通過為每個租戶使用不同的數據庫用戶名來分割數據。 通過tenant_id列和按tenant_id篩選的視圖,我可以確保租戶無法訪問其他租戶的數據。 我寫了一篇博客文章,介紹如何在周末將單租戶應用程序轉換為多租戶: https : //opensource.io/it/mysql-multi-tenant/

對於所有租戶來說,擁有一個數據庫和一個代碼庫比維護多個數據庫或模式要容易得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM