我正在开发一个网站,将管理多个实体的数据。实体之间不共享数据,但它们可能属于同一客户。客户可能希望从单个“仪表板”管理他们的所有实体。那么我应该为所有事情都建立一个数据库,还是将数据分开到单独的数据库中?有最佳实践吗?有什么积极/消极的:
- 整个网站的数据库(实体有一个“customerID”,数据有“entityID”)
- 每个客户的数据库(数据有“entityID”)
- 每个实体的数据库(数据库与客户的关系在数据库之外)
多个数据库似乎会有更好的性能(更少的行和连接),但最终可能成为维护的噩梦。
我正在开发一个网站,将管理多个实体的数据。实体之间不共享数据,但它们可能属于同一客户。客户可能希望从单个“仪表板”管理他们的所有实体。那么我应该为所有事情都建立一个数据库,还是将数据分开到单独的数据库中?有最佳实践吗?有什么积极/消极的:
多个数据库似乎会有更好的性能(更少的行和连接),但最终可能成为维护的噩梦。
就个人而言,我更喜欢单独的数据库,特别是每个实体的数据库。我喜欢这种方法,原因如下:
当然,升级架构需要更多时间,但根据我的经验,一旦您部署并且添加是微不足道的,修改就相当少见。
我认为如果没有更多信息,这很难回答。
我倾向于一个数据库。正确编码的业务对象应该可以防止您在查询中忘记 clientId。
您正在使用的数据库类型及其扩展方式可能会帮助您做出决定。
对于未来的模式更改,从维护的角度来看,似乎一个数据库会更容易——你有一个地方可以制作它们。
备份和恢复呢?您是否遇到过客户想要为其其中一个实体恢复备份的情况?
这是多租户 SAAS 应用程序中相当正常的场景。两种方法都有其优点和缺点。搜索多租户 SAAS(软件即服务)的最佳实践,您会发现大量需要思考的东西。
将它们保存在单独的数据库中的一个很好的论点是它更易于扩展(您可以简单地安装多个服务器,客户端数据库分布在服务器上)。
另一个论点是,一旦您登录,您就不需要在每个查询中添加额外的 where 检查(用于客户端 ID)。
因此,由每个客户端的多个数据库支持的主数据库可能是更好的方法,
如果客户端只需要从备份中恢复一个实体,而让其他实体保持当前状态,那么如果每个实体都在单独的数据库中,维护将会容易得多。如果它们可以一起备份和恢复,那么将实体作为单个数据库维护可能会更容易。
我认为您必须采用最现实的情况,而不一定是客户“可能”将来想要做的事情。如果您要推销该功能(即在一个仪表板中查看所有实体),那么您必须找到解决方案(可能从多个数据库中提取仪表板)或为整个应用程序使用单个数据库。
恕我直言,在同一个数据库中拥有多个客户的数据对我来说似乎是个坏主意。您必须记住始终按 clientID 过滤查询。
单一数据库选项将使维护更加容易。
它还取决于您的 RDBMS,例如
使用 SQL server 数据库很便宜
使用 Oracle,可以很容易地按客户“customerID”对表进行分区,因此单个大型数据库对于每个客户的运行速度与小型数据库一样快。
无论您选择哪种方式,请尝试将其隐藏在您的数据访问代码中
您是否计划将代码部署到多个环境?
如果是这样,则尝试将其保存在一个数据库中,并让所有表引用都以配置文件中的命名空间为前缀。