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

9
我正在开发一个网站,将管理多个实体的数据。这些实体之间不共享数据,但可能由同一客户拥有。客户可能希望从单个“仪表板”管理他们所有的实体。那么我应该为所有内容使用一个数据库,还是将数据分开存储到各自的数据库中呢?
是否有最佳实践?以下是采用不同数据库方案的优缺点:
- 整个网站使用一个数据库(每个实体具有“customerID”,数据具有“entityID”)。 - 每个客户使用一个数据库(数据具有“entityID”)。 - 每个实体使用一个数据库(与客户的数据库关系在数据库之外)。
使用多个数据库似乎会有更好的性能(较少的行和连接),但最终可能会成为维护的噩梦。
11个回答

5

个人而言,我更喜欢使用单独的数据库,特别是每个实体都有一个数据库。我喜欢这种方法的原因如下:

  1. 较小的数据库可以更快速地查询。
  2. 查询更加简单。
  3. 没有意外显示一个客户的数据给另一个客户的风险。
  4. 随着实体数量的增加,一个数据库可能会成为性能瓶颈。使用每个实体一个数据库的方式可以获得一种内置的水平可扩展性。
  5. 当客户或实体被删除时,数据清理变得容易。

确实需要更多的时间来升级模式,但根据我的经验,一旦部署,修改相对较少,添加也很简单。


2

我认为没有更多信息的情况下这个问题很难回答。

我倾向于使用一个数据库。正确编码的业务对象应该能够防止您在查询中遗漏clientId。

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

就将来的模式更改而言,从维护的角度来看,似乎使用一个数据库会更容易 - 您只需要在一个地方进行更改即可。


1

看看微软网站上的文章吧。我认为它很好地阐述了多租户设计所涉及的不同成本和收益。还要看看维基百科上的多租户文章。有许多权衡,你最好的选择取决于你正在开发的产品类型。


1

备份和恢复怎么样?您是否遇到过客户想要为其实体之一恢复备份的情况?


1

这是多租户SAAS应用程序中相当正常的情况。两种方法都有其优缺点。搜索多租户SAAS(软件即服务)的最佳实践,您会发现大量需要考虑的内容。


0

单一数据库选项将使维护工作更加容易。


0

这也取决于您的关系型数据库管理系统,例如:

使用 SQL Server 数据库是便宜的。

使用 Oracle 可以轻松地按客户“customerID”对表进行分区,因此单个大型数据库可以像每个客户的小型数据库一样运行得很快。

无论您选择哪种方式,都应尽量将其隐藏在数据访问代码的低层中。


0
你有计划将你的代码部署到多个环境吗?
如果是这样的话,尝试将其放在一个数据库中,并且将所有表引用都以配置文件中的命名空间为前缀。

0

将它们保留在单独的数据库中的一个好理由是更容易扩展(您可以简单地在服务器上安装多个实例,并将客户端数据库分布在这些服务器上)。

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

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


0
如果客户需要从备份中恢复单个实体并保留其他实体的当前状态,则如果每个实体都在单独的数据库中,维护将更加容易。如果它们可以一起备份和恢复,则将实体作为单个数据库进行维护可能更容易。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接