C# 软件架构和数据库设计:每个公司一个数据库/web应用程序,还是所有公司一个数据库/web应用程序?

C# 软件架构和数据库设计:每个公司一个数据库/web应用程序,还是所有公司一个数据库/web应用程序?,c#,sql-server,database-design,architecture,deployment,C#,Sql Server,Database Design,Architecture,Deployment,我正在从头开始设计一个web驱动的SQL数据库应用程序。该应用程序将为处于同一行业类型的客户管理信息。换句话说,关于每个客户的信息(实体和它们之间的关系)在每个客户之间没有太大的差异。然而,信息量取决于公司的规模。应用程序可以托管在我们的服务器上,也可以托管在客户机选择的任何位置 我的第一个问题是:以下选项的优缺点是什么: A.管理多个客户机 同一数据库中的信息 B.管理每个客户的一个客户信息 数据库所以每个客户都有 它自己的数据库 我的第二个问题是:以下部署方法的优缺点是什么? A.每个

我正在从头开始设计一个web驱动的SQL数据库应用程序。该应用程序将为处于同一行业类型的客户管理信息。换句话说,关于每个客户的信息(实体和它们之间的关系)在每个客户之间没有太大的差异。然而,信息量取决于公司的规模。应用程序可以托管在我们的服务器上,也可以托管在客户机选择的任何位置

我的第一个问题是:以下选项的优缺点是什么:

  • A.管理多个客户机 同一数据库中的信息
  • B.管理每个客户的一个客户信息 数据库所以每个客户都有 它自己的数据库
我的第二个问题是:以下部署方法的优缺点是什么?

  • A.每个客户端都有自己的服务器(节点)
  • B.使用带有一台功能强大的服务器和多个网站的大型RAID驱动器
由于这些选择的决定会影响我的设计,我想从不同的角度了解利弊,包括维护、成本(财务和时间)和体系结构等等

使用的技术:

  • 数据库:MS SQL
  • 平台:ASP.NET
  • 语言:C#
欢迎提出任何意见或建议

谢谢


Cullen

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

目前商业软件行业的总体趋势是将应用程序集中到自己的服务器上,并将软件作为服务提供给客户

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


如果您担心硬件成本,您可以研究云托管服务,如和。

我不建议为每个客户机提供自己的数据库。我计划在我当前的应用程序中这样做,并与一个数据库进行了交谈。好事情,因为我们现在有300个客户。你能想象管理300个数据库吗?每次升级时都要更新每一个吗?确保每个都是最新的,等等

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


我们在一台功能强大的SQL server上拥有这些数据库。如果您有多个数据库,并将它们放在不同的服务器上,则可能会出现一些服务器比其他服务器更繁忙,而小客户机利用率不足的风险

您真的想查看以下内容:

这篇论文讨论了多租户体系结构的不同设计方案。从适当的数据分区、安全性和技能集来看,有很多事情需要考虑。
*更新了新的链接

我很乐意这样做设计它是为了能够使用单独的数据库,但在有明显的性能优势之前不要分离。

设计应用程序,使多个客户端可以存在于同一数据库中。(即,在客户数据之间建立一个隔离层)。然后计划将所有数据都放在一个数据库中


这样,您就不必一开始就对解决方案进行总体架构,但它为您提供了将高使用率客户机衍生到专用数据库的灵活性。如果数据库中只有一个客户机,那又怎样?这还将节省服务器成本,这样您就可以确保在添加更多容量之前已经以合理的方式使用了硬件投资。

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

我建议首先将整个系统设计为多租户,但在必要时保留使用单租户的选项。我认为我们之所以选择单身房客是因为客户的需求。我们的许多客户机在其内部网中运行应用程序

事实证明,我们的业务是以客户为导向的,具有许多客户特定的定制功能。为此,单租户设置非常适合。但我认为不可能将其扩展到显著更低的价位和更大的客户群

专业人士

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

  • 对消费类软件不利。不要期望规模太大
  • 维护是劳动密集型的:更新、备份、调试特定于客户端的问题
  • 当版本略有不同时,质量控制就更难了。更新后出现意外问题

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