繁体   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