Rails Rails 怎么做数据库分库的?

happyming9527 · 发布于 2016年08月17日 · 最后由 jarorwar 回复于 2016年08月19日 · 2407 次阅读
20521

最近接了个活,后端得做高负载的处理,我想要分库处理.论坛里有朋友后端数据库是多个的么?你们是如何做夸库的事务处理的呢?貌似rails是不支持两阶段提交的.请问大家有什么好方案呢?

共收到 21 条回复
6361

pg单表7亿,1000万/日。用的青云云pg ,1核2G,查询速度很快,你可以参考下。

20521

@nine 服务器都部署在海外.准备用aws,这方面有啥推荐的不?

27

#3楼 @happyming9527 用 Amazon 更好,直接上 RDS

96

看了下大家的回复,首选都是云数据库,云未来可期

6764

#2楼 @huacnlee 想知道你们的项目最后怎么了...

1090

分库还是不建议自己折腾。搞个主从还是比较简单的。可以用这个gem https://github.com/thiagopradi/octopus

20521

@huacnlee 这样分1024张表,之后其他跟用户表相关的表你们是如何处理的?是不是为了查询性能,增加了很多陇余的表?比如将跟用户相关的订单表按照用户的id分布规律,划分了分表..但是订单表又可能要按照product_id来查询,是不是又要根据product_id的分表规律,来再划分一次订单的分表?

20521

@benzhang 生产环境部署读写分离, 用binlog同步会有多大延迟?

De6df3

#10楼 @happyming9527 你还没有回答我的第一个问题!

De6df3

应用层只有一个 Model,以照片应用为例(实际上我们就是照片应用)

Photo 表,背后是 photos_1 - photos_1024,但 Model 只有一个,查询在 Rails 输出的时候还是:

select * from photos where user_id = ?

但到了 MySQL Proxy 层(阿里内部的非开源系统),将会分析这条 SQL,找到 user_id 关键字,并基于之前的分库分表设计,将 photos 换成 photos_(n),最后再往后面的 MySQL 发送请求。

但这样做有局限性,无法跨表查询或跨表查询会相对较慢,例如这样的语句场景会有问题(同时查询 user_id in (1, 2, 3)),1, 2, 3 的用户的 Photo 可能分布在不同的 photos_(n) 表里面,Proxy 需要分别查询最后再组合在一块儿,所以很多的实现都需要避开这样的问题。

所以,根据实际业务场景,选择合适的分表字段是很重要的!例如订单的场景,绝大多数场景一定都是自己看自己的订单,所以基于 user_id 拆分表是可行的。同理,Timeline,Notification 也是可以的。


以上都是理论,实际执行的时候比较复杂。并且,核心点还是你需要中间层的分库框架。

20521

@huacnlee 我想我是不需要分库分表了.谢谢你的耐心解答 0rz.我还有个问题一直不懂.是不是把一百万用户的信息放到redis里面,读取速度会比从mysql读取要快?在mysql中根据id查询,和从redis中按照user_id读取,哪个更快呢? 根据我以前碰到的问题,貌似mysql里两张内存中的临时表,对某个数字字段做关联查询,查询速度比在硬盘上的两张表,对数字字段加索引后,进行关联.查询的要慢.是不是在mysql中的内存中的表,进行关联查询,是要做全表扫描的?

De6df3

MySQL 主键、基于索引的查询,哪怕几百万的数据,也是非常快的。

不要听传言说 Redis 快、MongoDB 快就去用那些东西,前提还是你懂他们不?你知道他们适用的场景不?

飞机比汽车快,但你会开么?以及飞机能在城里开么?

前面都说了,要看场景选择合适的方案。至于怎么知道什么适合你,你需要去了解这些东西(MySQL、Redis ...)它们适用于什么场景,优缺点是什么。

你的第二句我没看懂...

20521

@huacnlee 谢谢你的解答! 0rz

1090

#11楼 @happyming9527 我们用的是PostgreSQL,延时具体没有测过,这个还是得看应用场景。重要的都放倒事务里面,基本上不会出啥问题.

1090

#11楼 @happyming9527 我们用的是PostgreSQL,延时具体没有测过,这个还是得看应用场景。重要的都放倒事务里面,基本上不会出啥问题.

20521

@benzhang 谢谢解答 0rz

5610

#3楼 @nine 这个你是说PG比Mysql好么

5610

楼主。我最近也在关注~ 看这个谈到的大表优化问题。https://www.zhihu.com/question/19719997

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册