一个数据库还是多个数据库?

时间:2020-03-05 18:41:36  来源:igfitidea点击:

我正在开发一个网站,该网站将管理多个实体的数据。实体之间没有共享数据,但是它们可以由同一客户拥有。客户可能希望通过一个"仪表盘"管理所有实体。因此,我应该为所有内容使用一个数据库,还是将数据分离到单独的数据库中?
有最佳实践吗?有以下几点的积极/消极是什么:

  • 整个站点的数据库(实体具有" customerID",数据具有" entityID")
  • 每个客户的数据库(数据具有" entityID")
  • 每个实体的数据库(数据库与客户的关系不在数据库之内)

多个数据库似乎将具有更好的性能(行和联接更少),但最终可能成为维护的噩梦。

解决方案

回答

备份和还原呢?我们是否会遇到客户想要为其实体之一还原备份的情况?

回答

在多租户SAAS应用程序中,这是相当正常的情况。两种方法各有利弊。搜索多租户SAAS(软件即服务)的最佳实践,我们会发现很多值得思考的东西。

回答

将它们保存在单独的数据库中的一个很好的论据是,它易于扩展(我们可以简单地安装多个服务器,并且客户端数据库分布在服务器之间)。

另一个论点是,登录后,无需在每个查询中添加额外的where检查(用于客户端ID)。

因此,由每个客户的多个数据库支持的主数据库可能是一种更好的方法,

回答

如果客户端只需要从备份中还原单个实体,而使其他实体保持其当前状态,则如果每个实体位于单独的数据库中,则维护会容易得多。如果可以一起备份和还原它们,则将实体维护为单个数据库可能会更容易。

回答

我认为我们必须采用最现实的方案,而不必一定是客户将来可能想做的事情。如果我们要推销该功能(即在一个仪表板上查看所有实体),则必须找到一种解决方案(也许是从多个数据库中提取仪表板),或者将单个数据库用于整个应用。

恕我直言,在同一数据库中拥有多个客户端的数据对我来说似乎是个坏主意。我们必须记住要始终按clientID过滤查询。

回答

我认为,如果没有更多信息,这很难回答。

我依靠一个数据库。正确编码的业务对象应防止我们忘记查询中的clientId。

我们正在使用的数据库类型及其扩展方式可能有助于我们做出决定。

对于将来的架构更改,从维护的角度来看,似乎只有一个数据库可以简化一个数据库。

回答

就个人而言,我更喜欢单独的数据库,特别是每个实体的数据库。我喜欢此方法的原因如下:

  • 有关查询的=更小=更快。
  • 查询更简单。
  • 绝不会意外地将一个客户的数据显示给另一个客户的风险。
  • 随着数据库的增大(实体数量增加),一个数据库可能会造成性能瓶颈。我们将获得一种水平可扩展性构建,每个实体1个。
  • 随着客户或者实体的删除,易于清理数据。

当然,将需要更多时间来升级架构,但是根据我的经验,一旦部署,修改就很少见了,添加的内容也很少。

回答

在Microsoft网站上查看此文章。我认为布局多租户设计的不同成本和收益方面做得很好。另请参阅维基百科上的多租户文章。权衡取舍,最佳匹配很大程度上取决于我们要开发的产品类型。

回答

这也取决于RDBMS,例如

用SQL Server数据库很便宜

使用Oracle,可以很容易地按客户" customerID"对表进行分区,因此对于每个客户而言,单个大型数据库的运行速度可以与小型数据库一样快。

但是,无论我们选择哪种方式,都应尝试将其隐藏为数据访问代码中的低级级别

回答

我们是否打算将代码部署到多个环境?

如果是这样,则尝试将其保留在一个数据库中,并使所有表引用都以配置文件中的命名空间为前缀。

回答

单个数据库选项将使维护更加容易。