在多个站点之间共享数据库数据的最佳方法是什么?

时间:2016-04-30 18:47:40

标签: sql-server database database-design data-sharing

我正在运行多个网站,并注意到他们所依赖的许多表都是标准的东西,理想情况下应集中在一起:

  • 国家
  • 城市
  • 货币
  • 文件扩展名(mp3,jpg,png等)

当一个更新时,我不得不在每个站点的所有数据库中更新它,这将变得乏味并导致疏忽。我最初是这样设计的,因为我认为如果我创建了一个共享数据库,那将是一个单点故障。如果共享数据库崩溃,那么我的所有网站都会遭受损失。

是否有更好的方法可以做到这一点,或者我是否必须接受单点故障的风险,并采用强大的灾难恢复程序来缓解这种风险?

我正在使用SQL Server 2014 Enterprise。

3 个答案:

答案 0 :(得分:1)

1]如果您的所有04网站都有静态数据,那么您应该选择单个数据库。这里的数据库DML(数据操作语言)操作应该是最小的而不是经常的。虽然网站性能会有点低,但它是性能v / s数据库维护之间的权衡。

2]如果您的所有04网站都有电子商务应用程序等OLTP(在线交易处理),那么您应该将所有四个数据库分开。

为上述任何一种情况保留灾难恢复

答案 1 :(得分:1)

归结为平衡风险,成本和收益 - 你的问题更容易发生,如果发生了什么事情会有多糟糕?

参考数据的更新多久不会应用到所有地方?发生这种情况有多糟糕?如果更新将在任何地方应用,但是最终只是最终而不是立即应用,这是不是很糟糕?等等。

将其与以下内容进行比较:数据库崩溃的频率如何?如果发生这种情况有多糟糕?等等。

系统简单有多重要?它已经很难管理了吗?如果是这样,代码或数据库是否更难?

我可以想到几种选择;哪个最好取决于你的情况。这种情况包括您已掌握的技术,技术策略等等。

  • 你可以保持现状。
  • 您可以使用适当的availability safeguards更改为单个大型共享数据库。这意味着网站将始终完全同步,但备份和升级将更大更难,并且网站捆绑在一起(这可能不适合您的组织结构)。
  • 如果您具有参考数据的单个记录系统,则可以更改的任何更新也将这些更新应用于其他数据库。这不能很好地扩展,它不具有事务安全性(因此如果更新代码崩溃,给定的站点可能会错过更新),但保持数据库方面不变,并且可能足够好。
  • 您可以将每个数据库拆分为参考数据的2:1部分(每个站点都相同)和其他所有部分的1部分(每个站点的数据不同)。您可以设置从记录系统到参考数据的复制到其他实例,然后change the client code to read both parts of the database
  • 如果您已在不同网站之间拥有某种共享基础架构,例如如微服务中的共享消息队列,更新记录系统的东西也可以将消息放入队列,每个网站都会读取该消息并导致它更新自己的数据库。 (这将是最终的一致性,而不是立即的,但这可能已经足够了。)

答案 2 :(得分:1)

为什么不将数据库创建为服务,这意味着不要将数据库直接暴露给客户端,而是通过REST接口公开它。

通过这种方式,您可以更好地处理应用程序的容错要求,然后在其上面具有更好的恢复机制。

希望这有帮助。