多组织SaaS mySQL设置?

时间:2012-06-21 23:15:15

标签: php mysql

我是目前正在为特定人群开发专用SaaS服务的团队的一员。 我对PHP和mySQL有所了解,所以我在这些平台上开发它。将在云上部署并在多个国家/地区发布。

我已经到了将数据库中的组织/主要用户分开的想法,并想看看你们的想法。

当SaaS管理发票和许多其他敏感信息时,在mySQL服务器上分发它的最佳过程是什么?我想到了以下选项:

1)将所有信息放在单个表中的单个数据库中,并由标识行的组织分隔。 - 确实看起来很安全,当有几千个用户和10,000行时可能会很慢?

2)拥有单个数据库,但将表与用户ID分开,例如。 '1000_invoices' - 再次可能更快但不安全。

3)在每个组织注册上创建单独的数据库,以及用于访问数据库的特定用户,数据库名称是否存储在sessions / cookie中?每个组织用户。

无论如何,我想知道你们认为什么是最好的选择?如果不是以上那么你推荐什么?为什么?任何有关安全的事情都将受到高度赞赏。之前没有使用大型多组织应用程序。 提前谢谢!

1 个答案:

答案 0 :(得分:8)

我过去开发了大量的SaaS应用程序,我们发现大型“公共”SaaS服务(如KashFlow,可能是Salesforce?)所使用的“单一应用程序部署,单一数据库”设置并没有太多感。原因如下:

  • 第1号:拥有机密信息的客户公司希望保证他们的数据更“安全”,并且当他们的数据被分区到应用程序层之外时,更容易做出这些承诺。
  • 不同的客户有时希望为他们定制软件应用程序,例如他们自己的额外数据库字段,不同的登录屏幕可视化设计,或不同的(或自定义)系统“模块” - 具有不同的应用程序实例使这成为可能
  • 至少在开始时,它也使缩放更容易。通过将单个客户端的应用程序配置到与其他服务器不同的服务器,可以更轻松地进行负载平衡,而使用单个应用程序则意味着您需要花费更长时间来开发它以使其可扩展。
  • 数据库主键更易于使用。您的客户可能会开始提出问题,例如为什么他们的“CustomerID”值每次增加500而不是1。
  • 如果您的客户遍布全球,则可以更轻松地在其他国家(使用自己的本地服务器和数据库服务器)部署部署,而不是在国外部署大型应用程序或强制用户使用intercontinential(即慢速+延迟连接到数千英里以外的服务器。

除了应用程序软件部署之外,还有一些缺点,例如管理数百个,可能是数千个数据库的额外管理负担,但是它对程序代码进行的大量简化使其变得有价值。此外,使用大量shell脚本可以轻松实现自动化配置和部署。