当前位置:  开发笔记 > 编程语言 > 正文

使用MySQL和MongoDB的组合

如何解决《使用MySQL和MongoDB的组合》经验,为你挑选了1个好方法。

使用MySQL和MongoDB的组合是否有意义.我试图做的基本上是使用MySQl作为"原始数据备份"类型的东西,其中所有数据存储在那里但不从那里读取.

数据也同时存储在MongoDB中,读取只发生在mongoDB中,因为我不必进行连接和填充.

例如,假设构建NetFlix

在mysql中我有一个评论和电影的表.然后当在mySQL中发表评论时我只是将它添加到表中,而在MongoDB中我更新电影文档以保存这个新评论.

然后,当我想要获得电影和评论时,我只需从mongoDb获取文档.

我主要担心的是因为"新"mongodb与MySQL相比如何.在Mongo发生意外情况的情况下,我们有一个MySQL备份,我们可以快速获得应用程序回退到mysql和memcached.



1> Niels van de..:

从理论上讲,它可能听起来不错,但是你需要考虑很多事情.这将使您的应用程序比您想象的更复杂.我会举几个例子.

两个不同的系统

您将处理两个不同的系统,每个系统都有自己的行为.这些不同的行为将使得保持一切同步变得非常困难.

当MongoDB中的写入失败但在MySQL中成功时会发生什么?

或者相反,例如,当违反MySQL中的列约束时?

如果在MySQL中出现死锁怎么办?

如果您的架构发生了变化 一次迁移很痛苦,但您必须进行两次迁移.

您必须在应用程序代码中处理其中一些场景.这让我想到了下一点.

两个数据访问层

您的应用程序需要与两个外部系统交互,因此您需要编写两个数据访问层.

这些层都必须进行测试.

两者都必须保持.

您的应用程序的其余部分需要与两个层进行通信.

抽象出两个层将引入另一层,这将进一步增加复杂性.

级联失败的可能性

如果MongoDB失败,应用程序将回退到MySQL和memcached.但此时memcached将是空的.所以MongoDB发生故障后的每个请求都会命中数据库.如果你有一个高流量的站点,这也可以很容易地删除MySQL.

忠告

确定您认为MongoDB可能发生"意外事件"的所有可能方式.然后为每个案例使用最简单的解决方案.例如,如果您担心数据丢失,请使用复制.如果数据损坏,请使用延迟复制.

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有