如何同时,有效地将数据写入双方的NoSQL和RDBMS

问题描述 投票:2回答:3

让我们假设一个设置,将移动应用与它的后台通过API通信,以及数据从该通信造成(以及其他如JSON-基于事务写入)写入,并从MongoDB实例读取。

现在,因为我想执行存储在蒙戈数据有些沉重的分析,应该我宁愿:

  • 同时直接保存到RDBMS数据写到蒙戈(所以后端服务调用蒙戈和成功写入后还要求RDBMS)
  • 从蒙戈执行读取(具有一些间隔),并加载新的数据到RDBMS

恐怕这两个解决方案都需要还重新设计理论上方案较少蒙戈是在与RDBMS关系和模式不变的协议。它是否真的需要在蒙戈任何文件结构的变化更多的规划?我直觉说是的,但我期待真实的例子。我希望我的观点是非常明显的。

mongodb architecture nosql rdbms
3个回答
1
投票

有迹象表明,需要你踏上这里的解决方案之前,必须了解一些限制。最相关的这些是延迟。如何走出过期可以将您的数据呢?

你是在某种后写的解决方案几乎肯定期待在这里,取数据出来的MongoDB,并将其写入到数据仓库。现在的问题是,多远您的MongoDB背后可以将数据仓库是什么?基于提取 - 转换 - 装载模型(ETL)的许多解决方案每晚的基础上工作,从而最大限度地减少网络系统的影响。有些可以做一个小时的基础上相同,但将有实时系统更多的潜在影响。

交易按交易很可能不需要分析系统的支持。你真的想,如果你能避免这种情况,因为这使人更加负载在两个系统上比通常是有道理的。

要回答你的第二个问题,是的,一旦你依赖于模式启动,它需要是稳定的。它没有要与你的目标模式必然同步增长,但你的ETL过程必须认识到两者,并且将不得不随时修改任何一个重大的变化。作为“无模式”并不意味着没有一个模式,它只是表示该模式不是由软件执行,而是由系统上的依赖强制执行。


1
投票

也许CQRS模式将是对你有好处。请参阅:https://martinfowler.com/bliki/CQRS.html

您可以使用RDBMS写型号。蒙戈 - 用于读取模型。每次写操作后RDBMS你应该基于从写入模型数据更新您的ReadModel(MongoDB的文档)。


1
投票

我认为至少有工程工作的选择是使用一个卡夫卡连接器的MongoDB,使得连接器将读取从OPLOG在近实时的MongoDB的变化,写在卡夫卡的事件。然后,从卡夫卡您可以将数据写入到使用流处理关系数据库。

从UI双写是不是因为它可以引入延迟,复杂性和opeeational开销一个不错的选择。如果在写一个数据库出现故障?

© www.soinside.com 2019 - 2024. All rights reserved.