软件架构和数据库设计:每个公司一个数据库/ Web应用程序或所有公司的一个数据库/ Web应用程序?

时间:2009-02-23 23:57:06

标签: c# sql-server database-design architecture deployment

我正在从头开始设计一个Web驱动的SQL数据库应用程序。该应用程序将管理同一行业类型的客户的信息。换句话说,关于每个客户的信息(实体和它们之间的关系)从一个到另一个不会变化太多。但是,信息量取决于公司的规模。该应用程序可以托管在我们的服务器上或客户选择的任何地方。

我的第一个问题是:给出以下选项有哪些优缺点:

  • 甲。管理多个客户 同一数据库中的信息;
  • B中。管理一个客户信息 数据库;所以每个客户都会有 它自己的数据库;

我的第二个问题是:给出以下部署方法有哪些优缺点?

  • 甲。每个客户端都有自己的服务器(节点);
  • B中。使用大型RAID驱动器和一个功能强大的服务器和多个网站;

由于这些选择的决定会影响我的设计,我想从不同的角度了解优缺点,包括维护,成本(财务和时间)以及架构等等。

使用的技术:

  • 数据库:MS SQL
  • 平台:ASP.NET
  • 语言:C#

欢迎提出任何意见或建议,

谢谢,

库伦

6 个答案:

答案 0 :(得分:5)

我不建议为每个客户提供自己的数据库。我打算为我当前的应用程序执行此操作,并将其与单个数据库进行对话。好的,因为我们现在有300个客户。你能想象管理300个数据库吗?每次升级时更新每一个?确保每个都是最新的等等。

免责声明:实际上,我们实际上有几个数据库。一些非常大的客户拥有自己的数据库,其他客户共享剩余的数据库。我想可能总共有7个数据库。

我们在一个功能强大的SQL服务器上拥有数据库。如果您有多个数据库并将它们放在不同的服务器上,那么您将面临一些服务器比其他服务器更繁忙且小型客户端未充分利用其服务器的风险。

答案 1 :(得分:5)

您真的想要查看以下内容:

https://docs.microsoft.com/en-us/azure/sql-database/sql-database-design-patterns-multi-tenancy-saas-applications

这是一篇针对多租户架构的不同设计方案的论文。正确的数据分区,安全性和技能集需要考虑很多事情。

*使用新链接更新

答案 2 :(得分:5)

我正在混合这个。 将其设计为能够使用单独的数据库,但在明显的性能优势之前不要分开。

设计应用程序,以便多个客户端可以存在于同一个数据库中。 (即在客户数据之间建立一层分离)。然后计划将其全部放在一个数据库中。

这样,您就不需要开始构建您的解决方案,但它可以让您灵活地将非常高使用率的客户端分离到专用数据库。如果你的数据库中只有一个客户端,那么呢?这还可以节省服务器成本,这样您就可以确保在添加更多容量之前已经以合理的方式使用硬件投资。

答案 3 :(得分:4)

我有大约40个客户运行单租户设计的经验。每个客户端都有单独的ASP.NET应用程序文件和SQL Server数据库。应用程序核心二进制文件对于每个客户端都是相同的,但客户端也有自定义模块。

我建议首先将整个系统设计为多租户,但如果需要,可以选择单租户。我认为我们单租户的原因来自客户需求。我们的许多客户在其内部网中运行应用程序。

我们的业务非常以客户为导向,拥有许多针对客户的特定定制功能。为此,单租户设置非常合适。但我认为不可能将其扩展到显着更低的价格点和更大的客户群。

<强>赞成

  • 适合商业软件。易于定制,但您仍然可以从重用中获益
  • 我们可以使用SQL Express实例 服务器,只要每个数据库 低于4GB
  • 客户之间有很多分离。例如,每个客户端都可以有一个单独的IIS应用程序池
  • 更多系统级别的安全性,而非完全应用程序级别
  • 单个客户端的软件版本可以长时间冻结
  • 每个客户端通常都不会出现错误
  • 根据实际客户需求,可以很好地增加新功能。功能的第一个客户基本上是beta-testers

<强>缺点

  • 对消费者软件不利。不要指望扩展太多
  • 维护是劳动密集型的:更新,备份,调试特定于客户的问题......
  • 当版本稍有不同时,质量控制会更难。更新后出现意外问题

答案 4 :(得分:1)

最大的问题是维护和更新应用程序。如果您有多个实例正在运行,则必须维护/升级所有这些实例,如果它们位于不同区域的地理位置,则会变得更加麻烦。

现在,商业软件行业的整体趋势是将您的应用程序集中到您自己的服务器上,并为您的客户提供软件即服务。

我可以看到必须在客户站点运行应用程序的唯一真正原因是:如果它正在处理敏感信息,并且公司有限制远程存储该数据的策略。

如果您担心硬件成本,可以查看云托管服务,例如Amazon s2Google App EngineMicrosoft Azure

答案 5 :(得分:1)

除了性能等,它是否能为您的客户提供最佳的单独数据库服务?该软件是否可以在没有您的公司和/或许可证的情况下存在或使用?

例如,简单的电子商务解决方案必须提供数据库,以便在业务需求出现时将内容和数据库从主机移动到主机。假设您的公司没有失败,永远使用您的软件。我怀疑我的公司会使用这样的解决方案,尽管我们可能会使用托管解决方案,如果我们知道我们可以在以后的内部托管它。

安全也是另一个问题。一个数据库存在单点故障,如果一个客户受到攻击并且您的代码中存在错误,则可能会泄露您的所有客户。

应用程序是否会定制,如果是这样,单个数据库会导致问题吗?