Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 如何同时高效地将数据写入NoSQL和RDBMS_Mongodb_Architecture_Nosql_Rdbms - Fatal编程技术网

Mongodb 如何同时高效地将数据写入NoSQL和RDBMS

Mongodb 如何同时高效地将数据写入NoSQL和RDBMS,mongodb,architecture,nosql,rdbms,Mongodb,Architecture,Nosql,Rdbms,让我们假设一个设置,其中移动应用程序通过API与其后端进行通信,并且由此通信产生的数据(例如基于JSON的事务写入等)被写入MongoDB实例并从中读取 现在,由于我想对存储在mongo中的数据执行一些繁重的分析,我应该: 在写入Mongo的同时将数据直接保存到RDBMS(因此后端服务调用Mongo,成功写入后也调用RDBMS) 从Mongo执行读取(每隔一段时间),并将新数据加载到RDBMS中 我担心这两种解决方案还需要重新设计理论上无模式的Mongo,以便与RDBMS中的关系和模式保持一

让我们假设一个设置,其中移动应用程序通过API与其后端进行通信,并且由此通信产生的数据(例如基于JSON的事务写入等)被写入MongoDB实例并从中读取

现在,由于我想对存储在mongo中的数据执行一些繁重的分析,我应该:

  • 在写入Mongo的同时将数据直接保存到RDBMS(因此后端服务调用Mongo,成功写入后也调用RDBMS)

  • 从Mongo执行读取(每隔一段时间),并将新数据加载到RDBMS中


我担心这两种解决方案还需要重新设计理论上无模式的Mongo,以便与RDBMS中的关系和模式保持一致。Mongo中的任何文档结构更改是否真的需要更多的规划?我凭直觉说是的,但我寻找真实世界的例子。我希望我的观点足够清楚

也许CQRS模式对您有好处。 见:

您可以将RDBMS用于写模型。Mongo-for-Read模型。
在对RDBMS进行每次写入操作后,您应该根据写入模型中的数据更新ReadModel(MongoDB文档)。

我认为工程上最省力的选择是为MongoDB使用Kafka连接器,这样连接器将近实时地从oplog读取MongoDB更改,并在Kafka中写入事件。然后从Kafka可以使用流处理将数据写入关系数据库


从UI进行双写不是一个好的选择,因为它会引入延迟、复杂性和操作开销。如果写入一个DB失败怎么办

在着手解决此问题之前,需要了解一些约束条件。其中最相关的是延迟。您的数据有多过时

在这里,您几乎肯定会看到某种写后解决方案,将数据从MongoDB中取出,并将其写入数据仓库。问题是,您的数据仓库能落后于您的MongoDB多远?许多基于提取-转换-负载模型(ETL)的解决方案每晚工作,以便将对在线系统的影响降至最低。有些人可以每小时做同样的事情,但会对实时系统产生更大的潜在影响

分析系统可能不需要逐事务支持。如果可以的话,您确实希望避免这种情况,因为这会给两个系统带来比通常合理的多得多的负载


要回答第二个问题,是的,一旦您开始依赖于模式,它就需要是稳定的。它不必与您的目标模式同步,但您的ETL过程必须同时了解这两者,并且在任何一个模式发生重大变化时都必须进行修改。“无模式”并不意味着没有模式,它只是意味着模式不是由软件强制执行的,而是由系统上的依赖项强制执行的。

不清楚为什么首先绝对需要MongoDB。你能重新思考使用Eas桑德拉(CasdRa+ES)吗?你能说明为什么我应该考虑改变吗?Mongo已被开发人员选为主要应用程序后端,我需要增强高级分析的体系结构。考虑到NoSQL应该高度定制以满足您的需求,理想情况下应该由架构师权衡,理想情况下,:-)。。。结构化/非结构化数据、写入/读取、延迟、Infra、CAP权衡、主驱动或对等体系结构、体系结构复杂性锁定等。。。每个NoSQL Soln都有自己的优缺点。不知道你的UC,不可能提出其他建议;您可以考虑使用Apache Spks+MangGDB进行分析。如果你想写高/强的分析,你应该考虑使用CasAndRa+SCAPK代替CasAndRa+ErrkStask..…我非常喜欢你的答案(因为这证实了我最初的想法)。你能从另一个答案对卡夫卡的解决方案发表评论吗?“近实时地从oplog读取MongoDB更改”是否会给MongoDB带来您想象中的额外负载?我理解从日志读取与从DB读取不同。同意,但日志也可以有I/O约束。此外,随着记录的重放,目标服务器上的负载肯定会增加。最后,当您从oplog流式传输事件时,很可能需要访问实时数据存储以获取额外数据,以便将其正确写入数据库。这也会引起负载。关系型和NoSQL在其模式布局中很少是1-1(它们不应该是!),因此需要一些调整才能使其适合。