V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yueyoum
V2EX  ›  程序员

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

  •  
  •   yueyoum ·
    yueyoum · 2014-03-20 12:16:22 +08:00 · 4928 次点击
    这是一个创建于 3900 天前的主题,其中的信息可能已经有所发展或是发生改变。
    项目初期是用的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 条回复    1970-01-01 08:00:00 +08:00
    eric
        1
    eric  
       2014-03-20 13:34:17 +08:00
    如果要求保证事务和一致性的话,MongoDB 并不是很合适,或许你可以研究下 HandlerSocket。

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

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

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

    我现在的数据是 一部分在mysql中, 一部分在mongodb中, 并不是要说吧mongodb中的存入mysql
    yueyoum
        6
    yueyoum  
    OP
       2014-03-20 14:21:03 +08:00
    @dustise

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

    thanks, 我研究下。
    superisaac
        10
    superisaac  
       2014-03-20 19:35:31 +08:00
    活着 voltdb ?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5343 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 08:34 · PVG 16:34 · LAX 00:34 · JFK 03:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.