共享多租户MySQL数据库中的可伸缩性

时间:2018-02-03 13:43:40

标签: php mysql database scalability multi-tenant

我正在为大量租户设计基于网络的常见CRM应用程序。 用户(租户)在线注册使用该应用程序。最初,用户不会那么多,但将来有可能。

我想使用单个共享MySQL数据库。由于所选择的方案和未来的功能集成,不可能为每个租户创建单独的数据库。编程将使用PHP。

但是,我应该如何解决数据可伸缩性问题:

  1. 如果表中的行超出表的大小,该怎么办?如何解决这个问题?
  2. 如果我使用自动增量BIGINT主键,例如“联系人”表。 BIGINT的最大价值到达后会发生什么?
  3. 最佳做法是在真正庞大的数据表中使用外键约束吗?如果使用或未使用,它将如何影响应用程序的性能?
  4. MySQL是否适合这种应用?
  5. Zoho CRM的多租户数据库技术是什么?

1 个答案:

答案 0 :(得分:0)

MySQL很好地扩展了向上,即使表很大。基本上,您可以将数据库放在更大,功能更强大的服务器上,以处理需求。以我的经验,它通常受RAM限制。

一旦该技术开始流行,您可以通过创建数据库的只读副本来向外扩展。基本上,这些是主数据库的只读副本,这些副本与主数据库连续同步。在您的应用程序中,使用两个不同的数据库连接。第一个连接到一个只读副本,并用于所有SELECT语句。另一个连接是您的主数据库,该数据库将用于所有INSERT,UPDATE和DELETE语句。由于许多应用程序执行的SELECT最多,因此可以创建多少个只读副本的限制几乎没有,这将极大地扩展您的潜在规模。

在MySQL中,我倾向于为所有租户使用一个数据库,并通过为每个租户使用不同的数据库用户名来分割数据。通过tenant_id列和按tenant_id筛选的视图,我可以确保租户无法访问其他租户的数据。我写了一篇博客文章,介绍如何在一个周末将单租户应用程序转换为多租户:https://opensource.io/it/mysql-multi-tenant/

为所有租户拥有一个数据库和单个代码库比维护多个数据库或架构要容易得多。