首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

慢的不是 Ruby,而是你的数据库

如上所述,技术性能问题是由 Ruby 而不是 Rails 引起的。 ActiveRecordRails 中的实现,而非模式 per-sé)是对系统(关系数据库)的抽象,需要大量详细知识来保持性能。...sorting-by-un-indexed-field 示例揭示了 Rails数据库的耦合如何使其许多性能问题成为数据库问题。 根据我的经验,Rails 中的性能问题总是: N+1 个查询。...我的经验法则是,每个添加或删除的 where、has_many、group 或任何此类 active-record 方法都必须伴随着数据库迁移。...将逻辑与数据库分离,因为数据库是最慢且最难扩展的地方。 谨慎处理 sort()、where()、join() 等调用。如果添加(或删除)了索引,它们必须伴随着至少调优索引的迁移。...[5] 具有讽刺意味的是,在这种非 http、非 rails 的环境中,性能问题变得不那么明确了,然而在这些情况下,人们通常会因为 ruby 的性能问题而将其作为选项。

12630
您找到你想要的搜索结果了吗?
是的
没有找到

如何从 MongoDB 迁移到 MySQL

目前团队的成员没有较为丰富的 Rails 开发经验,所以还是希望使用 ActiveRecord 加上 Migration 的方式对数据进行一些强限制,保证数据库中数据的合法。 ?...文中会介绍作者在迁移数据库的过程中遇到的一些问题,并为各位读者提供需要停机迁移数据库的可行方案,如果需要不停机迁移数据库还是需要别的方案来解决,在这里提供的方案用于百万数据量的 MongoDB,预计的停机时间在两小时左右...,如果数据量在千万级别以上,过长的停机时间可能是无法接受的,应该设计不停机的迁移方案;无论如何,作者希望这篇文章能够给想要做数据库迁移的开发者带来一些思路,少走一些坑。...如果在项目中使用了很多 Mongoid 的插件,由于其实现不同,我们也只能根据不同的插件的具体实现来决定如何对其进行迁移,如果使用了一些支持特殊功能的插件可能很难在 ActiveRecord 中找到对应的支持...,就需要对业务逻辑进行详细地测试以保证不会有遗留的问题,这也就对我们项目的测试覆盖率有着比较高的要求了,不过我相信绝大多数的 Rails 工程都有着非常好的测试覆盖率,能够保证这一部分代码和逻辑能够顺利迁移

5.2K52

GitHub 关系型数据库垂直分库实践

十多年前,与当时的大多数 Web 应用程序一样,GitHub 也是一个使用 Ruby on Rails 开发的网站,它的大部分数据都保存在 MySQL 数据库中。...有了 ProxySQL,我们可以快速改变数据库的流量路由,将对客户端(也就是我们的 Rails 应用程序)的影响降到最低。 基于这样的结构,我们可以很自然地将数据库连接迁移到 cluster_b。...从 2019 年开始,我们逐渐具备了对这个关系型数据库进行伸缩的能力,并获得了如下结果: 在 2019 年,mysql1 平均每秒处理 95 万个查询,其中 90 万个查询发生在副本上,5 万个发生在主实例上...所有这些集群的服务器加在一起,平均每秒处理 120 万个查询,其中 112 万 5 千个查询发生在副本上,7 万 5 千个发生在主实例上。与此同时,每台主机的平均负载减少了一半。...我们将在后续文章中分享更多与之相关的工具、Linter 和 Rails 改进的细节内容。 结 论 在过去的十多年,GitHub 学会了如何通过伸缩数据库来满足不断增长的需求。

1.5K11

如何在Ubuntu 14.04上使用Puma和Nginx部署Rails应用程序

云关系型数据库是一种高度可用的托管服务,提供容灾、备份、恢复、监控、迁移数据库运维全套解决方案,可将您从耗时的数据库管理任务中解放出来,让您有更多时间专注于您的应用和业务。...如果没有,第一步是创建一个使用PostgreSQL作为其数据库的新Rails应用程序。 此命令将创建一个名为“appname”的新Rails应用程序,该应用程序将使用PostgreSQL作为数据库。...default host: localhost adapter: postgresql encoding: utf8 database: appname_production pool: 5...接下来我们将讨论如何使用环境变量设置数据库身份验证。 保存并退出。 安装rbenv-vars插件 在部署生产Rails应用程序之前,应使用环境变量设置生产密钥和数据库密码。...rescue ActiveRecord::ConnectionNotEstablished ActiveRecord::Base.establish_connection(YAML.load_file

5.4K10

如何在Ubuntu 14.04上使用Git Hooks部署Rails应用程序

介绍 在本教程中,我们将向您展示如何使用Git hooks自动将Rails应用程序的生产环境部署到远程Ubuntu 14.04服务器。...使用Git hooks将允许您通过简单地将更改推送到生产服务器来部署应用程序,而不必手动拉动并执行诸如执行数据库迁移之类的操作。...安装PostgreSQL 大多数生产Rails环境使用PostgreSQL作为数据库,所以现在让我们将它安装在您的服务器上。...rescue ActiveRecord::ConnectionNotEstablished ActiveRecord::Base.establish_connection(YAML.load_file...如果保持原样,服务器将尝试对应用程序的生产环境执行以下操作: 运行bundler 创建数据库 迁移数据库 预编译资产 重启Puma 重启Nginx 如果您想进行任何更改或添加错误检查,请随时在此处执行此操作

2.5K60

5分钟学会如何玩转云数据库组件(迁移,审计,订阅)

为了保证数据库的可用性,云数据库支持主从实时热备,提供容灾、备份、恢复、监控、迁移等功能。...数据库迁移 数据传输服务(Data Transmission Serivce DTS)提供数据迁移、数据同步、数据订阅于一体的数据库数据传输服务,帮助您在业务不停服的前提下轻松完成数据库迁移,利用实时同步通道轻松构建异地容灾的高可用数据库架构...数据迁移 支持不同环境及不同类型的数据库迁移。...或腾讯云云服务器 CVM 上 MySQL 数据库迁移。...PostgreSQL 数据库迁移 数据传输服务 DTS 支持数据迁移功能,提供自建 PostgreSQL 数据库到云数据库TencentDB for MySQL的连续数据复制,用户可在不停服的情况下对数据进行在线热迁移

11.8K70

总结Web应用中常用的各种Cache

文章以Nginx,Rails,Mysql,Redis作为例子,换成其他web服务器,语言,数据库,缓存服务都是类似的。 以下是3层的示意图,方便后续引用: ?...自动个更新: class Article has_many :commentsendclass Comment belongs_to :article, :touch => trueend 5....数据查询缓存 通常来说web应用性能瓶颈都出现在DB IO上,做好数据查询缓存,减少数据库的查询次数,可以极大提高整体响应时间。 数据查询缓存分2种: A....rails内置了query cache (https://github.com/rails/rails/blob/master/activerecord/lib/active_record/connection_adapters.../abstract/query_cache.rb ),在同一个请求周期内,如果没有update/delete/insert的操作,会对相同的sql查询进行缓存,如果文章类别都是相同的话,真正去查询数据库只会有

4.7K40

使用ORM框架,必须迁就数据库的设计吗?

这意味着,我还必须使用面向数据库架构的语法来操纵业务逻辑。 (5)支持很多数据库固然很好,但是lz如何处理数据库方言问题?对于大部分低端用户来说,能很好很简便地处理好MSSQL就很不错了。...对于一个渐进添加功能的Web程序,程序的升级,同时保证原有的数据平滑地迁移到新的数据库里面是非常重要的事情。对于RailsActiveRecord,就做的很好。...BUG修复? --由于PDF.NET框架是在实际商业产品中的应用,所以维护一直在进行,功能扩展和Bug修复一直在进行中; (3)ORM的框架众多,lz的产品优势在哪里?定位简单还是功能强大?...--由于历史原因,框架最初定位在支持.NET2.0,IQueryable 是.NET 3.0以后才支持,目前正在考虑框架直接支持LINQ; (5)支持很多数据库固然很好,但是lz如何处理数据库方言问题?...--框架提供了从数据库来生成实体类的工具,但也允许你先ModelFirst、CodeFirst,我的许多示例(比如示例操作OQL的部分)都是直接创建实体类, 没有设计数据表的,如果采用手工方式,你可以自定义要持久化哪些属性以及如何持久化

2.1K90

Rails框架流行在他的设计理念

这两天看了一本书《Grails权威指南》,看了这个Java上Rails框架,其中有两条设计理念: 1、make simple thing easy and make complex possible...2、Convention Over Configuration --约定高于配置 Rails几乎成了敏捷web框架的代名词,Java社区的Grails,.NET开源项目Mono Rails和Subsonic...SubSonic项目和Castle的ActiveRecord的子项目,由于.net静态语言的原因,在动态特性的实现上没有RoR中那么灵活,它基于.net中的attribute来标识字段和关系,SubSonic...他们的设计模式都是ActiveRecordActiveRecord做CRUD很简单,每个对象可以有自己的Fetch,FetchByxxx方法,从开发者的角度看这些对象,它们知道如何加载和保存自己,对象自己来维护...jQuery 和 MonoRail 4、Loger: 对一个web应用,log是很常用的,Castle 框架和spring.net,MS企业类库都有log,还有一个更通用的Log库,可参看通用日志 5

2K50

大型项目如何选择ORM:Active Record 还是 Data Mappers

每次都要看着数据库客户端,不然属性名称没法写。 容易把字段的类型弄错,varchar类型的属性传入了int。 容易写出SQL注入漏洞。...account = 'it2048'; $model->password = '123456'; $model->save(); 对比一下会发现,使用ORM之后上面那些问题都迎刃而解,接下来看看他是如何解决的...用ActiveRecord ORM的PHP框架有Laravel, Yii, CodeIgniter, CakePHP等。其他语言用的有 Ruby on Rails,Django等。...ActiveRecord上手非常快,业务逻辑和持久化逻辑在一个对象里一起解决,封装越好的框架持久化逻辑对编程人员越透明,程序员甚至不用知道底层数据库使用的是MySQL还是MongoDB。...如何选择ORM 上面把ActiveRecord和Data Mappers都介绍清楚了,选择哪一个需要根据实际业务需求来。

2.1K50

分布式 PostgreSQL 集群(Citus)官方教程 - 迁移现有应用程序

检查跨节点流量 迁移生产数据 小型数据库迁移数据库迁移(Citus Cloud) 重复 schema 启用逻辑复制 开放访问网络连接 开始复制 切换到 Citus 并停止与旧数据库的所有连接 更多...迁移生产数据 小型数据库迁移数据库迁移 确定分布策略 选择分布键 迁移到 Citus 的第一步是确定合适的distribution key 并相应地规划表分布。...在应用程序与 Citus 一起工作后,我们将了解如何将生产数据从源数据库迁移到真正的 Citus 集群中。 应更新写入表的应用程序代码和任何其他摄取进程以包含新列。...要了解如何建立 SSL 连接,请参阅使用 SSL 连接。...to be > 0 max_wal_senders = 5 # has to be > 0 需要重新启动数据库才能使更改生效。

2.1K30

拥抱 CICD 实践中的数据库部署与 Git

以下是关于现代数据库如何设计以集成 Git 组件到 CI/CD 工作流程中的一些观察。 为数据库创建测试环境和分支功能 在 Git 中,分支用于管理对应用程序代码的更改。...假设这样的场景: 应用由 Rails 开发,运行在 PlanetScale 的 MySQL 数据库上。需要在用 users 表加入一个新字段 address,并有一个包含代码修改的拉取请求。...大致如下: # db/migrate/20230830123456_add_address_to_users.rb class AddAddressToUsers < ActiveRecord::Migration...和 Git 代码回滚类似,数据库模式也应该可以回滚,以修复引入的错误、性能问题等。如果不正确的模式变更被合并,模式回滚可以恢复模式到之前的版本。理想情况下,即使数据库活跃运行也可以执行这种回滚。...但是这两者在迁移完成后都会终止,丢失关于迁移的信息,无法在不损失数据的情况下回滚已部署的变更。 Vitess 可能是解决方案。它是一个 YouTube 开发的开源数据库管理和中间件技术。

13710
领券