9

我正在开发一个网站,将管理多个实体的数据。实体之间不共享数据,但它们可能属于同一客户。客户可能希望从单个“仪表板”管理他们的所有实体。那么我应该为所有事情都建立一个数据库,还是将数据分开到单独的数据库中?有最佳实践吗?有什么积极/消极的:

  • 整个网站的数据库(实体有一个“customerID”,数据有“entityID”)
  • 每个客户的数据库(数据有“entityID”)
  • 每个实体的数据库(数据库与客户的关系在数据库之外)

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

4

11 回答 11

5

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

  1. 更小 = 查询速度更快。
  2. 查询更简单。
  3. 不会有意外将一个客户的数据显示给另一个客户的风险。
  4. 一个数据库在变大时可能会造成性能瓶颈(实体数量增加)。您可以获得一种水平可扩展性,每个实体 1 个。
  5. 在删除客户或实体时轻松清理数据。

当然,升级架构需要更多时间,但根据我的经验,一旦您部署并且添加是微不足道的,修改就相当少见。

于 2008-08-28T15:26:33.853 回答
2

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

我倾向于一个数据库。正确编码的业务对象应该可以防止您在查询中忘记 clientId。

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

对于未来的模式更改,从维护的角度来看,似乎一个数据库会更容易——你有一个地方可以制作它们。

于 2008-08-21T17:47:11.920 回答
1

备份和恢复呢?您是否遇到过客户想要为其其中一个实体恢复备份的情况?

于 2008-08-21T15:54:18.010 回答
1

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

于 2008-08-21T15:56:40.360 回答
1

查看Microsoft 网站上的这篇文章。我认为它很好地展示了与多租户设计相关的不同成本和收益。另请查看维基百科上的多租户文章。有很多权衡,您的最佳匹配很大程度上取决于您正在开发的产品类型。

于 2009-02-02T17:50:18.080 回答
0

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

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

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

于 2008-08-21T15:58:26.487 回答
0

如果客户端只需要从备份中恢复一个实体,而让其他实体保持当前状态,那么如果每个实体都在单独的数据库中,维护将会容易得多。如果它们可以一起备份和恢复,那么将实体作为单个数据库维护可能会更容易。

于 2008-08-21T16:00:26.450 回答
0

我认为您必须采用最现实的情况,而不一定是客户“可能”将来想要做的事情。如果您要推销该功能(即在一个仪表板中查看所有实体),那么您必须找到解决方案(可能从多个数据库中提取仪表板)或为整个应用程序使用单个数据库。

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

于 2008-08-21T16:40:13.483 回答
0

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

于 2010-04-26T15:42:34.707 回答
0

它还取决于您的 RDBMS,例如

使用 SQL server 数据库很便宜

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

无论您选择哪种方式,请尝试将其隐藏在您的数据访问代码中

于 2009-09-03T12:02:49.677 回答
0

您是否计划将代码部署到多个环境?

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

于 2009-09-20T12:33:35.347 回答