一个数据库还是多个数据库?
我正在开发一个网站,该网站将管理多个实体的数据。实体之间没有共享数据,但是它们可以由同一客户拥有。客户可能希望通过一个"仪表盘"管理所有实体。因此,我应该为所有内容使用一个数据库,还是将数据分离到单独的数据库中?
有最佳实践吗?有以下几点的积极/消极是什么:
- 整个站点的数据库(实体具有" customerID",数据具有" entityID")
- 每个客户的数据库(数据具有" entityID")
- 每个实体的数据库(数据库与客户的关系不在数据库之内)
多个数据库似乎将具有更好的性能(行和联接更少),但最终可能成为维护的噩梦。
解决方案
回答
备份和还原呢?我们是否会遇到客户想要为其实体之一还原备份的情况?
回答
在多租户SAAS应用程序中,这是相当正常的情况。两种方法各有利弊。搜索多租户SAAS(软件即服务)的最佳实践,我们会发现很多值得思考的东西。
回答
将它们保存在单独的数据库中的一个很好的论据是,它易于扩展(我们可以简单地安装多个服务器,并且客户端数据库分布在服务器之间)。
另一个论点是,登录后,无需在每个查询中添加额外的where检查(用于客户端ID)。
因此,由每个客户的多个数据库支持的主数据库可能是一种更好的方法,
回答
如果客户端只需要从备份中还原单个实体,而使其他实体保持其当前状态,则如果每个实体位于单独的数据库中,则维护会容易得多。如果可以一起备份和还原它们,则将实体维护为单个数据库可能会更容易。
回答
我认为我们必须采用最现实的方案,而不必一定是客户将来可能想做的事情。如果我们要推销该功能(即在一个仪表板上查看所有实体),则必须找到一种解决方案(也许是从多个数据库中提取仪表板),或者将单个数据库用于整个应用。
恕我直言,在同一数据库中拥有多个客户端的数据对我来说似乎是个坏主意。我们必须记住要始终按clientID过滤查询。
回答
我认为,如果没有更多信息,这很难回答。
我依靠一个数据库。正确编码的业务对象应防止我们忘记查询中的clientId。
我们正在使用的数据库类型及其扩展方式可能有助于我们做出决定。
对于将来的架构更改,从维护的角度来看,似乎只有一个数据库可以简化一个数据库。
回答
就个人而言,我更喜欢单独的数据库,特别是每个实体的数据库。我喜欢此方法的原因如下:
- 有关查询的=更小=更快。
- 查询更简单。
- 绝不会意外地将一个客户的数据显示给另一个客户的风险。
- 随着数据库的增大(实体数量增加),一个数据库可能会造成性能瓶颈。我们将获得一种水平可扩展性构建,每个实体1个。
- 随着客户或者实体的删除,易于清理数据。
当然,将需要更多时间来升级架构,但是根据我的经验,一旦部署,修改就很少见了,添加的内容也很少。
回答
在Microsoft网站上查看此文章。我认为布局多租户设计的不同成本和收益方面做得很好。另请参阅维基百科上的多租户文章。权衡取舍,最佳匹配很大程度上取决于我们要开发的产品类型。
回答
这也取决于RDBMS,例如
用SQL Server数据库很便宜
使用Oracle,可以很容易地按客户" customerID"对表进行分区,因此对于每个客户而言,单个大型数据库的运行速度可以与小型数据库一样快。
但是,无论我们选择哪种方式,都应尝试将其隐藏为数据访问代码中的低级级别
回答
我们是否打算将代码部署到多个环境?
如果是这样,则尝试将其保留在一个数据库中,并使所有表引用都以配置文件中的命名空间为前缀。
回答
单个数据库选项将使维护更加容易。