Database design 如何在Symfony2环境之间分离数据?
以下是场景: 我们想建立一个Symfony2应用程序,我们将主机上的不同客户端。每个客户机都有自己的环境,而不是一个环境(比如说事实上的“prod”环境) 那么,假设我们有客户“foo”和“bar”。然后我们将有三个环境:一个用于“foo”,一个用于“bar”,然后一个用于我们的开发(我们称之为“dev”)。我只是举个例子,假设我们可以有几十到几百个客户 这一点是,我们希望为客户机分离数据。我们的应用程序在我们的所有客户机中都能正常工作(相同的捆绑包等),但是,每个客户机都有自己的数据,其他客户机不应该访问这些数据(这给了他们数据安全性,使我们更容易备份、恢复、导入和导出每个客户机的数据)。我们已经有了允许这种功能的方法(每个环境一个客户端),但是,当涉及到存储数据库数据时,我们相信我们会遇到一些麻烦 根据我在文档中读到的内容,我假设Symfony2环境确实允许您加载不同的配置文件(除非进行其他更改)。因此,我还假设,如果在这些配置文件中,它们都指向相同的数据库配置,那么环境将“共享”数据库。或多或少,无论某人在环境“foo”中输入什么,在环境“bar”中输入的内容都是可以访问的。这是不可取的 使用这种开箱即用的环境概念,我看到了三种选择:Database design 如何在Symfony2环境之间分离数据?,database-design,symfony,doctrine,Database Design,Symfony,Doctrine,以下是场景: 我们想建立一个Symfony2应用程序,我们将主机上的不同客户端。每个客户机都有自己的环境,而不是一个环境(比如说事实上的“prod”环境) 那么,假设我们有客户“foo”和“bar”。然后我们将有三个环境:一个用于“foo”,一个用于“bar”,然后一个用于我们的开发(我们称之为“dev”)。我只是举个例子,假设我们可以有几十到几百个客户 这一点是,我们希望为客户机分离数据。我们的应用程序在我们的所有客户机中都能正常工作(相同的捆绑包等),但是,每个客户机都有自己的数据,其他客户
我们预计数据库将使用MySQL。此应用程序将在安装了Apache和PHP的Linux虚拟机上运行。我们还将使用最新版本的Symfony2。我想首先声明,symfony中的环境不会在客户端之间有所不同,而是在dev/test/staging/prod之间有所不同。从我的头脑中我不知道您使用环境的方式会导致问题的用例,但是,与框架背道而驰通常是个坏主意 当然,我并不完全了解您的项目,但在我看来,您有一个非常常见的用例,即不同的“用户”(您称之为客户机)访问您的项目,并且需要在具有不同“设置”(您称之为配置)的同时查看不同的数据 但是,如果这是您决定构建应用程序的方式,那么让我们使用它。symfony的解决方案点1和2相同。Symfony不关心dbms是否位于不同的服务器上,或者服务器上是否运行100个数据库。它只需要一个主机和正确的凭据。因此,您可以从1个数据库服务器开始,如果您发现性能下降,可以添加第二个数据库服务器 然而,当面对更新时,这个解决方案当然是至关重要的。部署应用程序时,必须更新100个数据库。由于您不能只为一个客户机部署,因此您要么关闭整个应用程序,直到数据库迁移完成,要么以向后兼容的方式开发应用程序。这可能行得通,但当需要第三种解决方案来解决关于模式布局的错误决策时,它往往会变得难看 您的第三个解决方案是经典方法。根据安全风险的不同,您将在应用程序和条令之间添加另一层,该层以仅可访问特定客户端数据的方式更改查询 我会选择第三种选择。如果您认为您可能存在性能问题,您可能需要考虑扩展技术,尤其是在MySQL(或任何RDBMS)的情况下。由于我们的资源(我们负担不起,并且希望使用MySQL),这不是我们真正的选择,但是我想提到它,因为我觉得它非常有趣,它将在数据库级别解决我们的问题 Oracle数据库(我相信是企业版)有一个名为“虚拟”的功能