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