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

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

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

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

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

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

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

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

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

© 2021 V2EX