4

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

我已经到了在数据库中分离组织/主要用户的地步,想看看你们的想法。

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

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

2) 拥有一个数据库,但使用用户 ID 分隔表,例如。'1000_invoices' - 同样可能更快但不安全。

3) 在每个组织注册和用于访问数据库的特定用户上创建单独的数据库,并且数据库名称存储在会话/cookie 中?每个组织用户。

无论如何,我想知道你们认为什么是最好的选择?如果不是以上那么你有什么建议?为什么?任何有关安全的事情都将不胜感激。以前没有使用过大型多组织应用程序。提前致谢!

4

1 回答 1

8

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

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

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

于 2012-06-21T23:28:02.540 回答