在一个实例下运行多个数据库

最好是有一个单一的实例与多个数据库或跨几个实例传播数据库?

我会build议一个实例,而不是在同一个盒子上的几个实例,除非你想解决一个非常特殊的问题。 它使得pipe理服务器更容易,并且使用更less的资源来开销。

对于系统pipe理来说,一个非常好的规则就是对编程很有效的规则,或者当我以前仍然这么做的时候,做了回退:使事情尽可能复杂,以便正确地解决问题,不多也不less。 多个实例通常会比一个具有多个DB的实例更复杂。

如果你需要分离的东西来保护它们,那么我会build议多个服务器安装(你可以在这里虚拟一个物理盒子),因为我不知道我会考虑一个盒子上的不同实例是安全边界。

假设SQL Server,因为这就是我所知道的…

我build议把它们放在一个实例中。

这允许在数据库之间访问数据的更高性能(即从数据库A内,你需要从数据库B中检索的东西)。 如果它们是单独的实例,则通信将需要通过链接的服务器,使用命名pipe道或其他东西来完成。 在单个实例中,您可以直接访问所有数据库(受安全约束)。

把它们放在一起给出了一些潜在的单点故障风险,但是我发现SQL Server本身非常强大。 整个机器可能会失败(把所有的实例都放下),但是我还没有看到那种使单实例安排更适合这种方式的失败。

由于您可以将存储pipe理降至文件级别,因此分离成多个实例对此没有帮助。

你可能会想到安全性的问题,如果不知何故,你会受到SQL注入攻击(这是没有任何借口的,因为它很容易防止!)。 但是,如果你在实例之间有链接的服务器,那么你实际上并没有得到更多的保护。

无论我们在讨论什么SQL服务器,作为一般原则,我会尽可能在一个实例中运行所有数据库,原因是其他人已经提到了所有的原因。 而且,如果你到了一个实例没有很好的处理负载的时候,是时候添加另一台机器,而不是另一个实例。 我能想到的唯一例外是只能使用自己的实例运行的应用程序。 当然,如果可能的话,最好避免使用这种软件或将其放在不同的机器上。

从内存angular度来看(再次假设MS SQL Server),单个实例中的多个数据库通常会导致更高效的使用。

我们在需要时通过现成的应用程序运行多个实例。 对于我们开发的东西,我们把它扔在一个实例。

下面是在同一个SQL Server实例上拥有数据库的优点和缺点

优点:

  • 更容易pipe理
  • 更容易pipe理安全实体(SQLlogin,angular色)
  • 复杂性较低
  • 从另一个数据库访问一个数据库时性能更好(因为它们都在同一个SQL Server实例上)
  • 更高效地使用内存和其他资源

缺点:

  • 如果SQL Server实例发生故障,“将所有鸡蛋放入一个篮子”可能会更危险。 但是,如果实例在同一台机器上,整个机器可能会失败,所以没有什么区别
  • SQL Server注入和其他安全威胁。 如果您正确configuration了系统,则不必担心这些问题
  • 不能有不同的SQL Server版本

我感觉,它完全取决于您的技术和业务需求,数据库devise,您的基础设施,数据库的未来增长以及数据库的关键程度。

如果您觉得您的基础架构能够处理数据库数量,应用程序用户在单个实例中的压力,那么在考虑到上述要点后,没有人会阻止您在单个实例上托pipe它们。

build议在单个实例上保留最关键和可玩的数据库。 其余全部依赖于数据库devise和容量规划。