• 请不要在回答技术问题时复制粘贴 AI 生成的内容
yueyoum
V2EX  ›  程序员

项目同时用了 mysql 和 mongodb,在这方面有经验的同学进来谈谈

  •  
  •   yueyoum ·
    yueyoum · Mar 20, 2014 · 5869 views
    This topic created in 4613 days ago, the information mentioned may be changed or developed.
    项目初期是用的mysql,但考虑到一些数据查询更新很频繁,所以上了mongodb。
    现在项目快做完了,好多数据都存在mongodb中。

    现在有两个问题:

    1. 事务保证。

    mongodb自身不支持事务,并且有些请求处理会同时更新mongodb和mysql,
    所以我现在的做法是 把各种条件全部检测过了, 然后去存mysql和mongodb。
    只能默认它们都能save成功。

    2. 现在mysql的读取也用redis做了cache,但存还是直接打到mysql上的。
    当mysql save完毕后,再自动去更新对应的cache.

    我现在想对 mysql save也做缓存,就是save到缓存,然后定时将缓存数据刷入mysql.

    问题还是 同时用了两个数据库, mongodb 是直接写入成功的, 万一mysql的更新数据还在缓存中,没写入mysql的时候, server 崩溃重启了,那么 数据就不统一了。


    如何处理这些问题?

    如果还是保持现状,直接写mysql,先不说性能,问题一还是有风险。

    或者全部只用一个数据库???
    10 replies  •  1970-01-01 08:00:00 +08:00
    eric
    eric
    Mar 20, 2014
    1
    如果要求保证事务和一致性的话,MongoDB 并不是很合适,或许你可以研究下 HandlerSocket。

    不太清楚选择上 MongoDB 只是为了解决 MySQL 的性能问题,还是有其它方面的考虑?
    lyhapple
    lyhapple
    Mar 20, 2014
    2
    笨办法: Save时,只存到mongodb, 附带一个同步到mysql的标志位, 存完后新开线程去存到mysql, 存成功了,再更新mongodb里的这个标志位;
    假如遇到 mongodb 写入成功, mysql还没写完, server就崩了, 就在启动服务的时候,扫描标志位, 未同步到mysql里的立即进行同步,全同步完成了,再提供服务。。

    这方法好笨,而且麻烦。:(
    dustise
    dustise
    Mar 20, 2014
    3
    真的需要redis mysql mongodb一起上么?有这个必要么,另外运维的同学们不会觉得痛苦么。
    yueyoum
    yueyoum
    OP
    Mar 20, 2014
    4
    @eric

    差不多吧。 用mongodb主要是对于热数据更新比mysql速度更快。就不用那么担心mysql压力。
    yueyoum
    yueyoum
    OP
    Mar 20, 2014
    5
    @lyhapple

    我现在的数据是 一部分在mysql中, 一部分在mongodb中, 并不是要说吧mongodb中的存入mysql
    yueyoum
    yueyoum
    OP
    Mar 20, 2014
    6
    @dustise

    可以不要redis, redis只是作为mysql的读缓存,同时还利用了一下它的 list 方便做一些小队列
    skydiver
    skydiver
    Mar 20, 2014
    7
    @lyhapple 这样还是不是原子操作啊。。要是mysql 写完了改标志位的时候崩了呢。。
    cevincheung
    cevincheung
    Mar 20, 2014
    8
    你需要的是TokuMX
    yueyoum
    yueyoum
    OP
    Mar 20, 2014
    9
    @cevincheung

    thanks, 我研究下。
    superisaac
    superisaac
    Mar 20, 2014
    10
    活着 voltdb ?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4522 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 09:40 · PVG 17:40 · LAX 01:40 · JFK 04:40
    ♥ Do have faith in what you're doing.