我们正在构建一个包含多个服务的网络平台,每个服务都有自己的基础数据。这些服务是按照面向服务的体系结构的原则独立构建的,但是它们会针对潜在的相关数据进行交易。我们正在考虑这些服务应该共享一个大数据库还是每个都有自己的数据库。(我们计划在Windows 2008群集上使用SQL Server 2008 Enterprise。)
我们已经考虑过的每种方法的一些优点包括:
单一数据库
- 可以通过外键约束将来自不同服务的数据关联在一起
- 分析摘录更易于编写和执行
- 在发生灾难的情况下,将平台恢复到一致状态更加容易
- 对于由多个服务引用的数据,一个服务缓存的数据很可能会在另一服务之后不久使用
- 管理和监控更简单,更便宜
多个数据库
- 维护工作,硬件问题,安全漏洞等未必会影响整个平台
- 假设每个数据库都在单独的硬件上,则与扩展一个大型机相比,扩展多台计算机可获得更多的性能优势。
从操作角度来看,此平台中的每个服务都拥有自己的数据库,或者它们都位于同一个数据库中,是否更具优势?哪些关键因素可以回答这个问题?