在项目中使用多个动态创建的数据库

时间:2015-07-14 12:57:26

标签: c# asp.net sql-server database database-connection

在StackOverflow上冲浪后发现,有很多项目使用多个数据库。在我的项目中,我甚至动态创建它们。参考this answer给出理由(构建ERP,一个客户端的一个数据库)是否足够重要? 有人可以给出这个项目结构的利弊吗?

2 个答案:

答案 0 :(得分:0)

您在问题中所说的是您有一个应用程序,它使用许多动态创建它们的数据库。现在你问为什么,有人建议使用单个数据库。 我的答案是,这取决于你想要达到的目标。 使用单个数据库而不是许多数据库通常更好,因为打开和关闭连接是您可以在PC上执行的最耗时的任务之一,现代数据库服务器使用连接池来使用更少的资源并优化连接的打开和关闭但仍然打开和关闭连接是耗时且耗费资源的操作。因此,如果您在应用程序中管理数据,那么如果所有数据都在单个数据库中,则更好。 相反,可以使用更多数据库更好地管理不同的方案。例如,我有一个应用程序,在PC上安装了一个使用SQL Server来管理数据的客户端。普通用户只访问他们的公司数据库,因此他们需要一个数据库。 相反,作为许多公司的顾问,我需要能够根据我工作的客户将我的客户连接到多个数据库。所以我的应用程序允许我有多个连接字符串并使用我需要的任何一个,但应用程序一次只能在一个数据库上工作。使用单个或多个数据库的最终答案当然是"它取决于"关于你的应用程序做什么。 此外,在数据库上创建表是一项耗费时间和资源的任务,因此动态创建表对您来说真的是必要的吗?或者它只是意味着您在需要时创建数据库然后使用它?

答案 1 :(得分:0)

整个应用程序架构取决于您的项目销售模式。

如果您为大多数客户端托管数据库(例如,他们中的一些人更喜欢在他们的环境中托管数据库),我建议您使用一个涵盖您所有客户的数据库。

我曾致力于为两个客户提供ERP系统,数据库托管在我们的环境中,但数据在客户之间分开。我们通过添加一个额外的表" Customer"并且每个与客户不同的实体都具有该表的外键。如果你问我有关性能的问题,我说你根本不是问题 - 在表上创建适当的索引,删除旧的不必要的数据,甚至在应用程序和数据库之间部署某种缓存服务器也能很好地处理它。我们有一个大约有的数据库。磁盘上有120GB,有些表有大约8400万。记录。 (我还在磁盘上使用了数据库大小为2TB,但它是一个SharePoint数据库,所以它的故事有点不同)

优点:

  • 最简单的数据库维护
  • 根据客户的要求迁移到单独的数据库的可能性
  • 将一个版本迁移到另一个版本需要更短的时间

缺点:

  • 当您的数据库大小增加时,您的数据库服务器也必须增长
  • 对于初学者而言更复杂的架构(但我认真的是,我不知道什么是更复杂的 - 每次为新客户生成新数据库,或者实施正确的解决方案架构一次)
  • 如果您的客户要求提供与其他解决方案不同的特定解决方案 - 您需要设置单独的环境并迁移数据

最后,根据统计数据 - 与维持成本相比,开发成本要低得多,因此如果通过实施适当的解决方案架构来降低维护成本,您的项目利润将会更大。