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

Using multiple dynamically created databases in project

在Whosebug上冲浪后发现,有很多项目使用多个数据库。在我的项目中,我什至动态创建它们。参考this answer给出的理由(建设ERP,一客一库)够重要吗? 谁能给出这个项目结构的优缺点?

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

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

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

我曾为两个客户开发过 ERP 系统,数据库托管在我们的环境中,但数据在客户之间是分开的。我们通过添加一个额外的 table "Customer" 来做到这一点,每个因客户而异的实体都有指向该 table 的外键。如果你问我关于性能的问题,我告诉你这根本不是问题——在 tables 上创建适当的索引,删除旧的不必要的数据,甚至在应用程序和数据库之间部署某种缓存服务器都可以很好地处理它。我们有一个大约有一个数据库。磁盘上有 120GB,一些 tables 有大约 8400 万。记录。 (我还使用过磁盘上大小为 2TB 的数据库,但它是一个 SharePoint 数据库,所以情况有点不同)

优点:

  • 最简单的数据库维护
  • 可以根据客户的要求迁移到单独的数据库
  • 从一个版本迁移到另一个版本花费的时间更短

缺点:

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

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