我们已经这样做了一段时间(虽然不是symfony和教义,但问题保持不变) - 我们从一个巨大的数据库开始,并在每个表中每行实现一个“环境标识符”。通过这种方式,架构迁移很容易:所有代码都是统一的,因此架构更改是对代码和架构的单个更改。
然而,这导致了速度(大表),敏捷性(移动/备份等大型数据集比许多较小的数据集更密集)的问题,当然还有更容易分解的环境,因为单个故障会拉下系统中的每个数据集...
然后,我们切换到多个数据库;每个环境都有自己的架构。通过利用 Doctrine 提供的迁移(在本例中为 1),我们能够快速更新整个应用或仅更新单个环境。此外,在触角之间移动特定变化的能力允许在速度和优化方面具有更高的精度。
我的建议是:创建一个扩展到不同租户的单个核心,并保持每个试点的本地自定义数据库配置。(在类似应用程序.ini结构中)
即
/
apps/
tentant1/
models/ <--- specific to the tenant
libraries/ <--- specific to the tenant
config/
app.ini <--- specific configuration
tentant2/
/**/ etc
core/
models/ <--- system wide models
libraries/ <--- system wide libraries (i.e. doctrine)
core.ini <--- system wide configuration
这可以使一切井井有条。我们甚至拥有每个试探者可用的核心的复杂结构。因此,能够覆盖特定于租户的“核心”的各个方面。