Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在多个站点之间共享数据库数据的最佳方式是什么?_Sql Server_Database_Database Design_Data Sharing - Fatal编程技术网

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

Sql server 在多个站点之间共享数据库数据的最佳方式是什么?,sql-server,database,database-design,data-sharing,Sql Server,Database,Database Design,Data Sharing,我正在运行多个网站,并注意到他们所依赖的许多表格都是标准的,理想情况下应该集中: 国家 城市 货币 文件扩展名(mp3、jpg、png等) 当一个网站更新时,我必须在每个网站的所有数据库中更新它,这会变得单调乏味,导致疏忽。我最初是这样设计的,因为我认为如果我创建一个共享数据库,它将是一个单点故障。如果共享数据库一旦崩溃,那么我所有的网站都会遭殃 是否有更好的方法来实现这一点,还是我必须接受单点故障的风险,并将其置于强健的灾难恢复程序中以减轻风险 我使用的是SQL Server 2014 E

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

  • 国家
  • 城市
  • 货币
  • 文件扩展名(mp3、jpg、png等)
当一个网站更新时,我必须在每个网站的所有数据库中更新它,这会变得单调乏味,导致疏忽。我最初是这样设计的,因为我认为如果我创建一个共享数据库,它将是一个单点故障。如果共享数据库一旦崩溃,那么我所有的网站都会遭殃

是否有更好的方法来实现这一点,还是我必须接受单点故障的风险,并将其置于强健的灾难恢复程序中以减轻风险


我使用的是SQL Server 2014 Enterprise。

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

2] 如果您的all 04网站具有类似OLTP(在线事务处理)的电子商务应用程序,那么您应该将所有四个数据库分开


为您选择的上述任何一种情况保留灾难恢复归结起来就是平衡风险、成本和收益—您的问题中哪种更可能发生,如果发生了,情况会有多糟

参考数据的更新不适用于任何地方的频率是多少?发生这种情况有多糟糕?如果一个更新被应用到所有地方,但只是最终应用而不是立即应用,这是否同样糟糕?等等

与之相比:数据库崩溃的频率有多高?如果发生这种情况有多糟糕?等等

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

我可以想到几个选择;哪一个最好取决于你的情况。这些情况包括你已经掌握了哪些技术,你的技术策略是什么等等

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

为什么不将数据库创建为服务,这意味着不直接向客户机公开数据库,而是通过REST接口公开数据库

通过这种方式,您可以以更好的方式处理应用程序的容错需求,并在其上具有更好的恢复机制

希望这有帮助