热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

rails访问多个数据库_如何在Rails6中管理多个数据库

rails访问多个数据库随着Rails6的发布,宣布的新功能之一是对多个数据库的支持。当在我们的一个应用程序中,我在努力有效地管理独立的DB时ÿ

rails访问多个数据库

随着Rails 6的发布,宣布的新功能之一是对多个数据库的支持。

当在我们的一个应用程序中,我在努力有效地管理独立的DB时,我大吃一惊。 人们想要这种支持的原因有很多,例如:

  • 使用SQL数据库存储用户数据,使用NoSQL存储位置数据
  • 有多个SQL数据库来管理单独的应用程序,但是一个应用程序可能需要直接访问另一个数据库
  • 管理多个NoSQL和Redis数据库以存储不同种类的数据等

当面对使用多个数据库时,通常,一个充当主服务器,而其他服务器充当从服务器。 因为我是在Rails 6发布之前进行管理的,所以我使用了一种不太理想的方式(读取修补程序/ hacky)来完成此任务。 我为第二个数据库创建了一个单独的YAML文件,用于存储连接信息。 这是一个示例文件:

second_database.yamladapter: db_adapterencoding: db_encodingpool: db_poolusername: db_usernamepassword: db_passworddatabase: db_namehost: db_host

要访问多个数据库,每次:

  • 通过从YAML文件中读取连接信息来建立连接
  • config = YAML.load_file(second_database.yaml')
    connection = ActiveRecord::Base.establish_connection(adapter: config[' adapter '],host: config[' host '],database: config[' database '],username: config[' username '],password: config[' password ']
    )

  • 查询数据
  • employees = connection.execute("SELECT * from employees" )

  • 关闭连接
  • connection.close

真头疼!

但是,发布新的Rails 6时,您可能不必费心(并且可以自己编写代码)来管理多个数据库。

Rails 6启动后,我就升级了我的应用程序,以利用多个数据库支持的好处。 让我们逐步了解升级并为多个数据库进行设置。

  • 首先,检查并更新ruby版本至2.5,因为rails 6必须要求ruby 2.5或更高版本。
  • 将您的ruby版本升级到2.5或更高版本:
    • 在ruby更新期间,可能仅由于版本升级而获得语法错误或弃用警告。
    • 请逐步更新Ruby版本-不要直接跳转到最新的Ruby版本; 这会给您带来很多问题。
    • 更新到下一个增量版本; 解决错误和警告; 运行并解决测试用例,然后重复该过程。
  • 将rails升级到5.2系列的最新版本:
    • 由于本文仅涵盖了从导轨5.2到导轨6的升级准则; 请确保您使用的是5.x系列的最新版本。
  • 更新Rails 6版本的gemfile:
    • 现在该更新Gemfile中的rails版本了。 在您的gem文件中更改rails gem版本。
    • 在终端中运行bundle update rails命令以更新rails和其他相关的gem。
  • 在终端中运行rails app:update:
    • 通过运行此命令,您会发现一些新的配置设置已添加到您的应用程序。 我建议您对每个文件更改使用差异工具选项(d)。
  • 取消注释new_framework_defaults_6_0.rb中的默认值:
  • 运行迁移:
    • 现在,运行bundle install安装剩余的gem,并运行迁移并解决问题(如果有)。
  • 运行并修复TestCases:
    • 大规模升级之后,让我们测试您的应用程序。 运行您的测试案例; 解决是否有任何失败,并解决弃用警告。
  • 启动本地主机并执行手动测试:
    • 我建议您对您的应用程序进行一轮手动测试。 赶紧动手,开始手动测试您的应用程序。

宾果游戏 ,现在您可以在Rails 6上运行!

现在,让我们进一步进行使用Rails 6的多个数据库设置。

有了rails 6多数据库支持,您可以拥有多个数据库,并且每个数据库都有一个副本(只读副本)。

现在,考虑具有单个主数据库的Rails应用程序,现在升级到Rails 6之后,您需要为一些新表添加新数据库。 您的database.yml当前版本如下:

带导轨6; 您可以为主数据库添加副本,也可以通过更新database.yml来添加新数据库,如下所示:

考虑将副本用于数据库时需要注意的几点:

  • 对于主数据库和副本数据库,数据库名称应该相同,因为两个数据库都包含相同的数据。 使用副本数据库时,您需要添加一个replica: true数据库设置为replica: true
  • 副本数据库和主数据库的用户名应该不同; 主用户将同时具有读取和写入权限,而副本用户将仅具有读取权限; 别写。
  • 添加新数据库时,还需要注意迁移路径。 要实现它,您需要如上所述在database.yml文件中添加migrations_path设置。 尽管我们有一个副本数据库,但我们没有为其设置迁移路径。

完成此步骤后,您将添加一个新数据库。 现在,让我们为其建立一个模型。 要使用一个新的数据库,您需要向您的应用程序添加一个抽象模型类。 如下所示:

现在您可以访问新数据库了; 现在让我们简要讨论多个数据库功能:

    1.主数据库和副本数据库之间的自动连接切换:

    要对应用程序使用只读数据库,您需要配置中间件以进行自动连接切换。

    自动连接切换使您的应用程序可以基于HTTP请求方法在主数据库和副本数据库之间进行切换。
    例如,如果您的应用程序收到POST,PUT,DELETE或PATCH请求,则该应用程序将自动写入主数据库。 并且,对于诸如GET或HEAD之类的请求,应用程序从副本之一读取。

    配置中间件以进行自动连接切换; 取消注释或将以下行添加到应用程序配置。

    仅当读取请求在我们上面配置的范围内时,Rails才将GET或HEAD请求发送到主请求。 默认情况下,它将设置为2秒。 您可以根据数据库基础结构自由更改它。

    2. 在主数据库和副本数据库之间进行手动连接切换:

    手动连接到副本数据库或主数据库; rails提供ActiveRecord::Base.connected_to方法。

    有时,无论请求类型如何,您的应用程序都需要连接到主数据库或副本数据库。 在这种情况下,您可以利用ActiveRecord提供的connected_to方法。

    通过使用上面的代码,无论请求类型如何,都可以强制您的应用程序连接到博客的数据库。

    现在,此命令使用该连接读取博客数据库的副本并使用它。

    Rails 6的多个数据库不支持哪些功能?

    他们来了

    • 分片
    • 副本的负载平衡
    • 跨多个数据库联接

    我们可以预期这些功能很快就会出现,并可以帮助我们使用Rails 6 super高效地配置,使用和管理多个数据库。

    翻译自: https://hackernoon.com/how-to-manage-multiple-databases-in-rails-6-ye6x3ypv

    rails访问多个数据库



    推荐阅读
    • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
      本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
    • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
    • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
      本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
    • 数据库基本介绍
      1、数据库基本知识概念:数据库:database(DB),是一种存储数据的仓库数据库是根据数据结构组织、存储和 ... [详细]
    • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
    • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
    • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
    • 2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)
      本文分享作者在2021年面试网易、腾讯、CVTE和字节等大型互联网企业的经历和问题,包括稳定性设计、数据库优化、分布式锁的设计等内容。同时提供了大厂最新面试真题笔记,并附带答案解析。 ... [详细]
    • Redis API
      安装启动最简启动命令行输入验证动态参数启动配置文件启动常用配置通用命令keysbdsize计算key的总数exists判断是否存在delkeyvalue删除指定的keyvalue成 ... [详细]
    • Redis的默认端口、数据库使用和多端口配置
      本文介绍了Redis的默认端口、数据库使用和多端口配置的方法。通过选择不同的数据库和使用flushdb命令可以实现对不同数据库的访问和清除数据。同时,本文还介绍了在同一台机器上启用多个Redis实例的方法,并讨论了配置认证密码的步骤和注意事项。 ... [详细]
    • 前面刚有AWS开战MongoDB,双方“隔空互呛”,这厢又曝出2亿+简历信息泄露——MongoDB的这场开年似乎“充实”得过分了些。长期以来,作为“最受欢迎的NoSQL数据库”,M ... [详细]
    • hackingTeam是如何被黑的
      hackingTeam是如何被黑的 ... [详细]
    • 什么是堡垒机?堡垒机是一个主机系统,其自身通常经过了一定的加固,具有较高的安全性,可抵御一定的攻击,其作用主 ... [详细]
    • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案相关的知识,希望对你有一定的参考价值。 ... [详细]
    • 《Spring Boot开发:从0到1》大纲结构
      《SpringBoot开发:从0到1》大纲结构v2.0第一部分SpringBoot基础第1章SpringBoot史前简述1.1J2EE(Java2Pla ... [详细]
    author-avatar
    黄勋佩淑青宜合
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有