数据库架构,数据库拆分

Database Architecture, Database Split

我遇到过不适合我的数据库架构。它适用于一小群开发人员...如果对此设计有任何意见,我将不胜感激。

这是对系统的简化描述。所有第三个 NF 数据库(客户、会计、利率、曝光)

我们有 4 个范式数据库:

客户数据库:维护客户和组织信息

汇率数据库:从第 3 方系统获取汇率

Exposure DB:联系第三方系统获取我们的银行账户 和交易信息

会计数据库:进一步计算财务风险和预测

我们有以下数据库用于数据仓库

SQL 服务器分析服务:星型模式

立方体

数据库拆分: 我们的 4 个数据库(ClientRateExposureAccounting) 是拆分数量 4 SQL 服务器,但它们都 运行 在同一台物理服务器上。这些数据库需要彼此的数据,例如我们有一个组织Table,它在所有数据库中使用……或者其他数据库中需要速率。

分析服务: 我们有星型模式和分析服务。我的理解是 Data Vault 可以用作生成启动模式的来源……。但我们并没有为此目的使用我们的 Data Vault。我们使用 SSIS 直接从 Client、Rate、Exposure 和 Accounting 数据库读取数据并直接填充启动模式。

问题:

  1. 当我们需要使用拆分数据库中的数据时,拆分数据库是个好主意吗?

  2. 有没有好的Source/Blog解释什么时候拆分数据库是个好主意?

  3. 将表从源数据库复制到目标数据库是一个好的解决方案吗?我觉得跨数据库查询比将这么多表复制到多个DBa更简单和高效。

某事是否是个好主意是一个见仁见智的问题。不太重要的是权衡是什么的问题,在这里我可以讨论这些。

在部门之间拆分数据库使部门可以更自由地决定其领域模型。 DDD 思想流派的一个有效见解是,团队形成有界上下文,这些上下文可能以与其他人略有不同的方式使用词汇。如果让各个团队更灵活地决定自己的术语和数据模型是一件好事,那就是为了这个。

另一方面,存在许多性能缺陷。每个系统对每个数据库中的数据分布知之甚少,因此无法有效地进行规划。跨节点连接 总是 昂贵。所以你也会遇到一些真正的缺点。

我认为复制数据往往会与除法的限界上下文优势相悖,顺便说一句,这是一个警告。但这是自主性和性能之间的权衡。

还有几件事需要考虑:

  1. 链接服务器会是比数据库更好的选择吗?
  2. 由目标数据库控制的某种 ETL 会更好吗?

在设计跨域边界的解决方案时存在一个共同的挑战。如果你有一个包含每个领域对象的单一数据库,那么一切都会变得相互依赖;如果你有很多独立的数据库,你必须处理跨域查询。

关于这一点的最新思考是micro services and CQRS的概念。可以说,您的设计是此设计解决方案的原始形式,"data vault" 充当代理。

微服务架构强制执行的决策是 "independence is more important than efficiency"。每个微服务(和底层数据存储)都可以做有意义的事情,并以自己的速度移动而不必担心依赖性。这样做的代价是一个更复杂的解决方案,尤其是在处理数据依赖性时。