V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
cevincheung
V2EX  ›  程序员

对于数据库主从及分表,你们是更乐意在代码层面来做还是直接使用中间件,比如 mysql-proxy?

  •  1
     
  •   cevincheung ·
    cevin · 2014-05-13 08:27:15 +08:00 · 3829 次点击
    这是一个创建于 3874 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不考虑dz这样的(不是做产品往外卖,自己运营层面的)
    14 条回复    2014-05-14 09:39:23 +08:00
    88250
        1
    88250  
       2014-05-13 09:03:26 +08:00
    代码层面,为了满足一些特殊的需要,比如多实例。
    vietor
        2
    vietor  
       2014-05-13 09:11:41 +08:00
    我们换成了MongoDB,之后用Sharding。
    andyhu
        3
    andyhu  
       2014-05-13 09:51:05 +08:00
    @vietor MongoDB感觉是用着挺舒服的,和nodejs搭配起来更是非常方便
    cevincheung
        4
    cevincheung  
    OP
       2014-05-13 09:53:05 +08:00
    @88250 多实例?强制指定连接某台服务器而不是随机抽取slave或master?
    cevincheung
        5
    cevincheung  
    OP
       2014-05-13 09:53:25 +08:00
    @vietor 的确,mongodb的话,自身已经做了类似mysql-proxy的很多工作了
    saihuang
        6
    saihuang  
       2014-05-13 10:27:56 +08:00
    刚开始基本都是在代码层面来做吧
    66CCFF
        7
    66CCFF  
       2014-05-13 11:00:51 +08:00 via Android
    @vietor mongo似乎没有锁和事务?那一些常见问题是怎么处理的呢?
    cevincheung
        8
    cevincheung  
    OP
       2014-05-13 11:06:37 +08:00   ❤️ 2
    @66CCFF
    mongo有锁,只是你不能mongo.lock()
    mongo的确不支持事务,如果需要使用mongodb还需要事务,建议你看一下Tokumx
    MasterYoda
        9
    MasterYoda  
       2014-05-13 12:46:58 +08:00
    开始都是代码层面上做吧,简单shard之类的。
    公司的业务做到后面一般会使用proxy,因为写业务逻辑的人可能根本不知道分表逻辑。
    对他们屏蔽底层细节,降低耦合。
    个人项目的话,无所谓吧。
    cevincheung
        10
    cevincheung  
    OP
       2014-05-13 14:47:08 +08:00   ❤️ 1
    @MasterYoda 开发测试环境是内网linux,已经装有atlas了,所以一开始就是中间件的开发环境,分表什么的配置都在中间件中配置,感觉还ok。

    mysql实时同步有什么好的建议?mysql replication异步容易延迟。
    Admstor
        11
    Admstor  
       2014-05-13 16:32:06 +08:00
    mysql同步机制决定了几乎不存在"实时"同步
    数据写入master,master生成bin-log,slave读取bin-log,slave执行bin-log
    每一个都可能产生很高的延迟...
    MasterYoda
        12
    MasterYoda  
       2014-05-13 16:56:34 +08:00
    @cevincheung 容易延迟是肯定的,还是要看延迟的原因,如果确定是由于写入量过大导致的(因为master可以多线程写,slave却只能单线程同步),可以考虑使用多线程的同步工具,记得淘宝的mysql组有过成熟的解决方案。

    当然延迟也有可能是网络延迟导致的,或者slave机器配置很差或者负载过高。不同原因不同解决思路。
    vietor
        13
    vietor  
       2014-05-13 18:29:22 +08:00
    @66CCFF MongoDB上没有事务。锁倒是有的,应该是隐含的,比如$set,$inc之类的并发锁。

    所有“事务”性质的请求都可以拆分成“非事务”的,只是清理垃圾数据的时候得自己来,呵呵。
    GTim
        14
    GTim  
       2014-05-14 09:39:23 +08:00
    @cevincheung 同步方面,其中一个就是采用/*master*/开头把语句导向主库,另外一个就是先放到缓存里 读的时候先读缓存
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   974 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 20:27 · PVG 04:27 · LAX 12:27 · JFK 15:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.