php – SAAS和Symfony2中的多租户?

前端之家收集整理的这篇文章主要介绍了php – SAAS和Symfony2中的多租户?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经使用Symfony近2年了,到目前为止,我构建的每个项目都是专门为每个客户端(即一个客户端,一个代码库,一个数据库)部署的.

让我说我有一个Project Management应用程序,我想为许多客户端部署.假设客户端将随着我在系统中构建的任何功能而去,如果我为每个客户端部署不同的代码库(因此,分配不同的数据库),这里是我预见的问题:

推出错误修复和升级将会很痛苦.我需要将其推送到我部署的每个存储库.如果我有50个客户端使用相同的应用程序,它将不会很好地扩展.
管理很痛苦如何为自己建立一个管理系统,我可以将所有项目拉入一个HTML表格?毕竟每个客户端都有自己的数据库,对吧?对于我所有客户的所有记录,我做任何有意义的事情,我需要一种方式来查看他们所有的数据库,一次,我不认为Symfony允许. (我不确定)
>用户帐号问题.如果用户正在为多家公司工作,他们都使用我的项目管理应用程序,该用户必须多次注册. (我知道这可以绕过我,如果我使用oauth,但我试图不去那里,如果我可以)

这是我已经考虑并在一定程度上尝试的解决方案.

解决方案1

一个数据库和一个代码库为所有我的客户.项目将在一个表下,发票在一个表之下,全部由他们自己的client_id标记.用户可以分配到项目,所以不需要多次注册.

这不是很难创建.但是,如果不同的客户需要发票的不同列,会发生什么?我的发票表将不断扩展(不同客户端需要的不同字段),并且每行可能包含许多空字段.更不用说,我的发票实体将以文件大小增长,每次新的自定义进行时,我都必须更新数据库模式.

解决方案2

一个数据库,每个客户端都有自己的表前缀.所以对于客户端A,我可以使用clientA_projects,clientA_invoices,clientA_configuration等

这是理想的,如果每个客户想要自定义他们的领域.但是,这是否意味着我需要为进入系统的每个新客户端创建新的实体和表单类?看起来像这个解决方案,我需要更新数据库模式与我得到的每个新客户端.

目前,我正在尝试无模式数据库(mongo和couch),希望无需先前指定表模式,我可以无需麻烦地实现解决方案1.但是我还在尝试,在我敢于部署一个可以生产的应用程序之前,还有一些方法可以解决,不熟悉与Symfony的麻瓜和沙发的问题.

所以,这是我被困在哪里.作为一名自我训练的程序员,我觉得我的知识有很多漏洞,需要填写(而不是来自CS背景的人).网络上没有很多地方谈论Symfony 2和多租户(也许我正在寻找错误的东西).如果有人能指出我更清晰的方向,也许最好的做法,例子的项目,我会真的很感激!

Btw,我打算在最新版本的Symfony(此时为2.3.2)中执行此操作.

先谢谢你们.

我也在使用Symfony2类似的时间(因为一个BETA),我建议你去解决方案#1.如果您正在进行SaaS,则无法根据您的原因向客户提供代码(主要是更新/升级的问题).整个麻烦将在用户管理上 – 哪个用户可以访问哪些数据,属于哪个组,公司等.所有其他的事情,如果完成正确将被编码与用户不一致的方式.您对不同公司的不同要求应该怎么做?使这些功能可配置.你可以在各个层次上实现:

>简单实体属性:在每个表中都有一个属性字段,并将所有内容保存为JSON,YAML或其他可动态结构化内容,
>一般配置:存在实体基础配置的一个位置(在上面写的方法中),并允许用户从那里管理新功能,所有更改都传播到简单实体,
>实现一些我所谓的Entity Parameters Pattern – 设计数据库表,其中包含参数类型,参数值和与不同级别上的其他实体的关系,然后制定可以应用于具有预定义义的任何地方的通用可配置参数类型.例如,“preferred_season”是包含配置“春季,夏季,秋季,冬季”的类型“choice_string”的参数,当附加到给定实体时,将始终呈现< select>字段与选择并保存与实体和参数类型相关的所选值.

此外,解决方案1具有一个无与伦比的优势 – 即使您想在最终发布代码,它也可以处理更多的一家公司.你只需要掩盖添加更多的能力. 原文链接:https://www.f2er.com/php/132059.html

猜你在找的PHP相关文章