`
zhangym124
  • 浏览: 344214 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

0
0
分享到:
评论

相关推荐

    配置高可用的rails

    数据库的高可用可以通过主从复制、读写分离等方式实现,常见的工具有MySQL的MHA、MariaDB的Galera等。 4. 会话共享:当应用部署在多台服务器上时,如何保证用户的会话信息在服务器间同步变得尤为重要。可以使用...

    active_record_sharding-old:基于模算法的ActiveRecord着色数据库库

    该库不支持Rails标准数据库管理/迁移功能。 因为,没有假定使用multidb。 使用推荐的。 用于着色数据库 分片对象是User类。 user片数据库(3节点)。 分片配置config/shards.yml development: # Rails.env user...

    nginx负载均衡

    读写分离通常通过配置应用或中间件来实现,将读操作路由到从服务器,而写操作仍然在主服务器上进行。 总的来说,Nginx的负载均衡能力与MySQL的主从同步和读写分离相结合,能构建出高可用、高性能的Web服务架构。这...

    用于 SaaS 多租户,非常经典的OA部门管理模型设计

    可以使用缓存技术、数据库索引优化、读写分离等方式提升系统响应速度。 5. **可扩展性**:设计时要考虑系统的横向扩展能力,以适应租户数量的增长。例如,通过负载均衡和集群部署来处理高并发访问。 6. **升级与...

    互联网高并发架构技术实践

    - **读写分离**:针对数据库读写频率高的问题,通过读写分离和主从复制技术来降低单台数据库的压力。 - **优势**:可以灵活地调整从机数量,以适应不断变化的业务需求。 - **劣势**:架构变得更加复杂,维护难度...

    互联网时代,我眼中的架构变迁

    此时可以通过实施读写分离和主从复制来减轻单台数据库服务器的压力。这种方法的优点是可以灵活地增加从数据库的数量来应对读取压力,但同时也带来了架构复杂度的提升以及维护难度的增加。 #### 集群时代的到来 ...

    Ruby-ActiveRecordTurntable是一个数据库分片的ActiveRecord扩展

    3. **Read/Write分离**:实现读写分离,提高系统性能。 4. **Elasticsearch集成**:可以与Elasticsearch搜索引擎配合,实现全文搜索。 5. **Scoping(作用域)**:定义分片的作用域,方便在代码中切换和操作不同的分...

    6.19基于mvc的web开发

    在Web开发领域,MVC(Model-View-Controller)架构模式是一种广泛应用的设计模式,它将应用程序分为三个主要组件,以实现职责分离,提高代码的可维护性和可扩展性。本节我们将深入探讨基于MVC的Web开发的核心概念、...

    博客空间Live Blog (多用户BLOG系统)-liveblog.zip

    12. **性能和可扩展性**:随着用户数量的增长,系统需要能够处理高并发请求,可能需要采用缓存策略、负载均衡、数据库读写分离等技术来保证性能。 13. **持续集成/持续部署(CI/CD)**:自动化测试、构建和部署流程...

    java开源包3

    支持redis的主从集群,可以做读写分离。缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL...

    java开源包4

    支持redis的主从集群,可以做读写分离。缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL...

    Seamless_database_pool:在ActiveRecord中添加对主从数据库集群的支持以提高性能

    然而,随着应用程序的增长,单一数据库服务器可能无法满足高并发和读写分离的需求。这时,引入主从数据库集群就显得尤为重要,而Seamless_database_pool gem就是为了实现这一目标。 Seamless_database_pool 是一个...

    Ruby语言中文教程.rar

    Rails中的MVC架构模式(模型-视图-控制器)将业务逻辑、用户界面和数据访问分离开来,使代码结构清晰。此外,测试驱动开发(TDD)在Ruby社区中十分流行,Ruby提供了Rspec等测试框架,鼓励开发者编写高质量的代码。 ...

    html 后台框架代码

    6. RESTful API支持:方便构建和消费API,实现前后端分离。 二、HTML框架的选择 1. Django:Python语言的强力后盾,拥有丰富的功能和优秀的文档,适合大型项目。 2. Flask:轻量级的Python框架,易于上手,适用于...

    java开源包1

    支持redis的主从集群,可以做读写分离。缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL...

    java开源包11

    支持redis的主从集群,可以做读写分离。缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL...

    java开源包2

    支持redis的主从集群,可以做读写分离。缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL...

    java开源包6

    支持redis的主从集群,可以做读写分离。缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL...

    java开源包5

    支持redis的主从集群,可以做读写分离。缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL...

    java开源包10

    支持redis的主从集群,可以做读写分离。缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL...

Global site tag (gtag.js) - Google Analytics