我正在为大量租户设计基于网络的常见CRM应用程序。 用户(租户)在线注册使用该应用程序。最初,用户不会那么多,但将来有可能。
我想使用单个共享MySQL数据库。由于所选择的方案和未来的功能集成,不可能为每个租户创建单独的数据库。编程将使用PHP。
但是,我应该如何解决数据可伸缩性问题:
答案 0 :(得分:0)
MySQL很好地扩展了向上,即使表很大。基本上,您可以将数据库放在更大,功能更强大的服务器上,以处理需求。以我的经验,它通常受RAM限制。
一旦该技术开始流行,您可以通过创建数据库的只读副本来向外扩展。基本上,这些是主数据库的只读副本,这些副本与主数据库连续同步。在您的应用程序中,使用两个不同的数据库连接。第一个连接到一个只读副本,并用于所有SELECT语句。另一个连接是您的主数据库,该数据库将用于所有INSERT,UPDATE和DELETE语句。由于许多应用程序执行的SELECT最多,因此可以创建多少个只读副本的限制几乎没有,这将极大地扩展您的潜在规模。
在MySQL中,我倾向于为所有租户使用一个数据库,并通过为每个租户使用不同的数据库用户名来分割数据。通过tenant_id列和按tenant_id筛选的视图,我可以确保租户无法访问其他租户的数据。我写了一篇博客文章,介绍如何在一个周末将单租户应用程序转换为多租户:https://opensource.io/it/mysql-multi-tenant/
为所有租户拥有一个数据库和单个代码库比维护多个数据库或架构要容易得多。