【问题标题】:Software as a service - Database软件即服务 - 数据库
【发布时间】:2009-09-18 20:23:53
【问题描述】:

如果我正在构建一个 CRM Web 应用程序以作为会员服务进行销售,那么设计和部署数据库的最佳方法是什么?

我是否有 1 个数据库,每个表包含 100 条记录,或者为不同的客户部署多个数据库?

我相信像 Flickr 这样的网站使用单一数据库真的有问题吗?

【问题讨论】:

  • 很好奇,您将提供 salesforce.com 尚不具备的功能?

标签: sql-server saas database-agnostic


【解决方案1】:

多个客户端称为“多租户”。例如,请参阅 Microsoft 的这篇文章“Multi-Tenant Data Architecture”。

【讨论】:

  • @Theo:为什么不设计您的系统以在两种设置中工作:1)不同的数据库和 2)相同的数据库,但不同的模式。基本上,您的客户端应用程序以某种通用方式为客户端获取数据库连接,并且仅与数据库一起使用。在这种情况下,您可以配置您的部署,并在需要时从一个更改为另一个。
  • @van:我刚刚阅读了关于多租户数据架构的文章,内容丰富。您的评论是有道理的,只是不同的模式方法显然需要相当多的工作来恢复每个模式的备份。虽然架构选项的主要好处是 MS SQL 能够处理更多部署。在这里做出艰难的选择
  • @chrisW:阅读那篇文章后,这一切都归结为构建 SaaS 应用程序的场景和安全隐患。不过,就我目前的情况而言,强化隔离选项似乎是更合乎逻辑的选择,允许每个客户端独立扩展,而不会出现架构选项带来的灰色区域。
【解决方案2】:

在像 CRM 系统这样的情况下,您可能需要为每个客户拥有单独的数据库实例。

我这样说是因为如果您想要更大的客户,大多数公司都有关于客户数据的安全政策。如果您将他们的客户数据与另一位客户存储在同一个数据库中,您就有将一家公司的机密数据暴露给另一家公司(竞争对手等)的风险。

像 Flickr 这样的网站不必担心这一点,因为我们大多数在互联网上的人对我们的个人数据没有如此严格的政策。

【讨论】:

  • +1 出于安全考虑。在 CRM 世界中,人们曾经认为由于安全问题,托管解决方案甚至是不可能的。尽管 salesforce.com 证明它是错误的,但他们尽最大努力向客户证明他们的数据是安全的。您确实必须对多个数据库备份等进行更多自动化。但是迁移/扩展客户数据并逐个更新到新的数据库结构也更容易。
  • 是的,确实如此。我们甚至有客户不允许我们将数据存储在不同数据库中的同一台服务器上,甚至有一个客户甚至将服务器放在不同的建筑物中。大约三年前,我们还发生了一起非常尴尬的事件,当时一位开发人员忘记将客户 ID 放入查询中,并将专有数据通过电子邮件发送给同一数据库中其他几家公司的销售代表。相信我,我们所有的大客户现在都在不同的系统上。
  • ...另一方面,有许多小型客户端同时大量使用您的系统,您可能会遇到连接池问题。
【解决方案3】:

从长远来看,维护一个包含多个客户数据的数据库是最容易的。考虑部署、备份等。但是,这并不能阻止您拥有该数据库的多个实例,每个实例都包含完整客户端数据集的一个子集。在确定产品的有用性/可取性之后,我建议增加数据库的数量。如果没有流量,就不需要复杂的基础设施......

所以,我只需在相关表中添加一个客户端 ID,然后在客户端 4 进来并且您的新部署范围是一个插入语句时微笑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 2016-06-20
    • 2011-01-08
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多