Rails读写分离实现_Ruby_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > Ruby > Rails读写分离实现

Rails读写分离实现

 2011/9/5 8:10:30  zhangym124  http://xuantan.iteye.com  我要评论(0)
  • 摘要:报表组件读写分离实现由于Kelude数据量不断增大,报表组件个别报表的查询会对生产主库造成很大压力。为了防止给主库造成过大压力,从而影响kelude线上使用,因此将报表组件连接我们的备库——slave库。分析如下:?1.slave库为kelude线上主库的备份库,为只读库,其它配置与主库相同;slave库的数据与主库的数据实时进行同步,是binlog同步的,延时一般情况下是300毫秒左右。2.虽然slave库在数据同步时有些许延时,但是作为报表分析,这一点上的延时基本可以忽略不计。切库过程
  • 标签:实现 rails

报表组件读写分离实现

由于Kelude数据量不断增大,报表组件个别报表的查询会对生产主库造成很大压力。
为了防止给主库造成过大压力,从而影响kelude线上使用,因此将报表组件连接我们的备库——slave库。

分析如下:?

1.slave库为kelude线上主库的备份库,为只读库,其它配置与主库相同;slave库的数据与主库的数据实时进行同步,是binlog同步的 ,延时一般情况下是300毫秒左右。
2.虽然slave库在数据同步时有些许延时,但是作为报表分析,这一点上的延时基本可以忽略不计。

切库过程:?

1.经过分析,和与DBA的沟通了解后,决定将报表组件的连接库切换为slave库。
2.更改数据库配置文件database.yml后,测试时发现,当有更新报表参数、或是订阅报表操作时,会报错。
3.经过bug定位,发现连到slave库时只有只读权限,是没有写权限的,因此保存用户的订阅参数当然会报错。
4.报表组件目前所有的写操作只涉及user_preferences,和reports两张数据库表。分析后,决定将涉及到这两张表写操作的Model类与主库中对应的表相映射。也就是说,报表组件所有的写仍在主库上进行,而所有的读是在slave库上,这也真正符合读写分离的要求。

附:?

将一个用作写的Model贴上,用作示例:

class ReportUpdate < ActiveRecord::Base
establish_connection :master_db
set_table_name "reports"
#These methods are created for db slice:ReadOnly.
def self.update_report report
ReportUpdate.find(report.id).update_attributes(report.attributes)
end

def self.create_report new_report
    ReportUpdate.create(new_report.attributes)
  end

end

?

?

数据库配置文件代码:

jobs:
adapter: mysql
host: *
username: *
password: *
database: *
encoding: utf8
master_db:
adapter: mysql
host: *
username: *
password: *
database: *
encoding: utf8
mysql: &using
adapter: mysql
host: *
username: *
password: *
database: *
encoding: utf8
development:
<<: *using
production:
<<: *using
test:
<<: *localhost

发表评论
用户名: 匿名