【问题标题】:Using combination of MySQL and MongoDB使用 MySQL 和 MongoDB 的组合
【发布时间】:2010-10-14 16:21:21
【问题描述】:

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

数据也同时存储在 MongoDB 中,读取只发生在 mongoDB 中,因为我不必进行连接和其他操作。

例如假设在构建 NetFlix

在 mysql 中,我有一个评论和电影表。然后,当在 mySQL 中发表评论时,我只需将其添加到表中,在 MongoDB 中,我更新电影文档以保存此新评论。

然后当我想获取电影和 cmets 时,我只需从 mongoDb 获取文档。

我主要担心的是“新”mongodb 与 MySQL 相比如何。如果 Mongo 发生意外情况,我们有一个 MySQL 备份,我们可以快速将应用程序回退到 mysql 和 memcached。

【问题讨论】:

    标签: mysql mongodb


    【解决方案1】:

    在纸面上,这听起来可能是个好主意,但是您必须考虑很多事情。这将使您的应用程序比您想象的更复杂。我给你举几个例子。

    两个不同的系统

    您将处理两个不同的系统,每个系统都有自己的行为。这些不同的行为会让所有内容保持同步变得非常困难。

    • 在 MongoDB 中写入失败但在 MySQL 中成功时会发生什么情况?
    • 或者反过来,例如,当违反 MySQL 中的列约束时?
    • 如果 MySQL 发生死锁怎么办?
    • 如果您的架构发生变化怎么办?一次迁移很痛苦,但您必须进行两次迁移。

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

    两个数据访问层

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

    • 这两个层都必须经过测试。
    • 两者都必须维护。
    • 应用程序的其余部分需要与两个层进行通信。
    • 抽象掉这两个层将引入另一个层,这将进一步增加复杂性。

    级联失败的可能性

    如果 MongoDB 失败,应用程序将回退到 MySQL 和 memcached。但此时 memcached 将为空。因此,MongoDB 失败后的每个请求都会命中数据库。如果您有一个高流量的网站,这也可以轻松关闭 MySQL。

    忠告

    找出您认为 MongoDB 会发生“意外”的所有可能方式。然后针对每个案例使用最简单的解决方案。例如,如果您担心数据丢失,请使用replication。如果是数据损坏,请使用delayed replication。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      • 2011-06-19
      • 2014-10-19
      相关资源
      最近更新 更多