在多个站点之间共享数据库数据的最佳方式是啥?
Posted
技术标签:
【中文标题】在多个站点之间共享数据库数据的最佳方式是啥?【英文标题】:What is the best way to share database data between multiple sites?在多个站点之间共享数据库数据的最佳方式是什么? 【发布时间】:2016-04-30 18:47:40 【问题描述】:我正在运行多个网站,并注意到他们所依赖的许多表都是标准的东西,理想情况下应该集中:
国家/地区 城市 货币 文件扩展名(mp3、jpg、png 等)当一个更新时,我必须在每个站点的所有数据库中更新它,这变得乏味并导致疏忽。我最初是这样设计的,因为我认为如果我创建一个共享数据库,那将是一个单点故障。如果共享数据库出现故障,那么我所有的网站都会受到影响。
有没有更好的方法来做到这一点,还是我只需要接受单点故障的风险并采用强大的灾难恢复程序来缓解它?
我使用的是 SQL Server 2014 Enterprise。
【问题讨论】:
【参考方案1】:归根结底是平衡风险、成本和收益 - 您的哪些问题更有可能发生,如果发生了会有多糟糕?
参考数据的更新多久没有应用到所有地方?发生这种情况时有多糟糕?如果更新将在任何地方应用,但只是最终而不是立即应用,这是否同样糟糕?以此类推。
将其与:数据库多久崩溃一次?如果发生这种情况有多糟糕?以此类推。
系统简单有多重要?已经很难管理了吗?如果是这样,是代码更难还是数据库更难?
我能想到几个选项;哪个最好取决于您的情况。具体情况包括您已经掌握的技术、您的技术战略等。
您可以保持原样。 您可以使用适当的availability safeguards 更改为单个大型共享数据库。这意味着站点将始终完全同步,但备份和升级将变得更大、更难,并且站点被捆绑在一起(这可能不太适合您的组织结构)。 如果您有一个用于参考数据的单一记录系统,则可以更改任何更新以将这些更新应用到其他数据库。这不能很好地扩展,它在事务上不安全(因此,如果更新代码崩溃,给定站点可能会错过更新)但保持数据库方面不变并且可能已经足够好了。 您可以将每个数据库分成 2 部分:1 部分用于参考数据(每个站点都相同),1 部分用于其他所有数据(每个站点不同)。您可以设置从记录系统将参考数据复制到其他实例,然后change the client code to read both parts of the database。 如果您在不同站点之间已经有某种共享基础架构,例如与微服务中的共享消息队列一样,更新记录系统的东西也可以将消息放入队列中,每个网站都会读取该消息并导致它更新自己的数据库。 (这将是最终的一致性,而不是立即的,但这可能已经足够了。)【讨论】:
【参考方案2】:1] 如果你的所有04网站都是静态数据,那么你应该选择单数据库。这里数据库DML(数据操作语言)操作应该是最少的,而不是经常。虽然网站性能会有点低,但它是性能与数据库维护之间的权衡。
2] 如果您的所有 04 网站都有类似电子商务应用程序的 OLTP(在线事务处理),那么您应该将所有四个数据库分开。
为您选择的上述任何情况保留灾难恢复
【讨论】:
【参考方案3】:为什么不将数据库创建为服务,这意味着不将数据库直接公开给客户端,而是通过 REST 接口公开它。
通过这种方式,您可以更好地处理应用程序的容错要求,然后在其之上拥有更好的恢复机制。
希望这会有所帮助。
【讨论】:
以上是关于在多个站点之间共享数据库数据的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章
在主机应用程序和今天的扩展程序之间共享用户生成的图像的最佳方式是啥
Django在多个项目之间共享相同用户模型和数据库的最佳方式