让我们假设一个设置,将移动应用与它的后台通过API通信,以及数据从该通信造成(以及其他如JSON-基于事务写入)写入,并从MongoDB实例读取。
现在,因为我想执行存储在蒙戈数据有些沉重的分析,应该我宁愿:
恐怕这两个解决方案都需要还重新设计理论上方案较少蒙戈是在与RDBMS关系和模式不变的协议。它是否真的需要在蒙戈任何文件结构的变化更多的规划?我直觉说是的,但我期待真实的例子。我希望我的观点是非常明显的。
有迹象表明,需要你踏上这里的解决方案之前,必须了解一些限制。最相关的这些是延迟。如何走出过期可以将您的数据呢?
你是在某种后写的解决方案几乎肯定期待在这里,取数据出来的MongoDB,并将其写入到数据仓库。现在的问题是,多远您的MongoDB背后可以将数据仓库是什么?基于提取 - 转换 - 装载模型(ETL)的许多解决方案每晚的基础上工作,从而最大限度地减少网络系统的影响。有些可以做一个小时的基础上相同,但将有实时系统更多的潜在影响。
交易按交易很可能不需要分析系统的支持。你真的想,如果你能避免这种情况,因为这使人更加负载在两个系统上比通常是有道理的。
要回答你的第二个问题,是的,一旦你依赖于模式启动,它需要是稳定的。它没有要与你的目标模式必然同步增长,但你的ETL过程必须认识到两者,并且将不得不随时修改任何一个重大的变化。作为“无模式”并不意味着没有一个模式,它只是表示该模式不是由软件执行,而是由系统上的依赖强制执行。
也许CQRS模式将是对你有好处。请参阅:https://martinfowler.com/bliki/CQRS.html
您可以使用RDBMS写型号。蒙戈 - 用于读取模型。每次写操作后RDBMS你应该基于从写入模型数据更新您的ReadModel(MongoDB的文档)。
我认为至少有工程工作的选择是使用一个卡夫卡连接器的MongoDB,使得连接器将读取从OPLOG在近实时的MongoDB的变化,写在卡夫卡的事件。然后,从卡夫卡您可以将数据写入到使用流处理关系数据库。
从UI双写是不是因为它可以引入延迟,复杂性和opeeational开销一个不错的选择。如果在写一个数据库出现故障?