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

2014 年 5 月 13 日
 cevincheung
不考虑dz这样的(不是做产品往外卖,自己运营层面的)
4458 次点击
所在节点    程序员
14 条回复
88250
2014 年 5 月 13 日
代码层面,为了满足一些特殊的需要,比如多实例。
vietor
2014 年 5 月 13 日
我们换成了MongoDB,之后用Sharding。
andyhu
2014 年 5 月 13 日
@vietor MongoDB感觉是用着挺舒服的,和nodejs搭配起来更是非常方便
cevincheung
2014 年 5 月 13 日
@88250 多实例?强制指定连接某台服务器而不是随机抽取slave或master?
cevincheung
2014 年 5 月 13 日
@vietor 的确,mongodb的话,自身已经做了类似mysql-proxy的很多工作了
saihuang
2014 年 5 月 13 日
刚开始基本都是在代码层面来做吧
66CCFF
2014 年 5 月 13 日
@vietor mongo似乎没有锁和事务?那一些常见问题是怎么处理的呢?
cevincheung
2014 年 5 月 13 日
@66CCFF
mongo有锁,只是你不能mongo.lock()
mongo的确不支持事务,如果需要使用mongodb还需要事务,建议你看一下Tokumx
MasterYoda
2014 年 5 月 13 日
开始都是代码层面上做吧,简单shard之类的。
公司的业务做到后面一般会使用proxy,因为写业务逻辑的人可能根本不知道分表逻辑。
对他们屏蔽底层细节,降低耦合。
个人项目的话,无所谓吧。
cevincheung
2014 年 5 月 13 日
@MasterYoda 开发测试环境是内网linux,已经装有atlas了,所以一开始就是中间件的开发环境,分表什么的配置都在中间件中配置,感觉还ok。

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

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

所有“事务”性质的请求都可以拆分成“非事务”的,只是清理垃圾数据的时候得自己来,呵呵。
yemoluo
2014 年 5 月 14 日
@cevincheung 同步方面,其中一个就是采用/*master*/开头把语句导向主库,另外一个就是先放到缓存里 读的时候先读缓存

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/112272

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX