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

不是 Ruby,而是你数据库

如上所述,技术性能问题是由 Ruby 而不是 Rails 引起。 ActiveRecord(Rails实现,而非模式 per-sé)是对系统(关系数据库)抽象,需要大量详细知识来保持性能。...我曾在一个拥有百万用户应用程序中,导致数据库服务器集群崩溃:原因在于一个无关控制器简单更改,使 Rails 切换到一个外部连接,该连接具有巨大物化视图,本不应以这种方式连接(用于报告)。...优化连接。添加简单 has_many 太容易了,这使得开发人员可以在数据库中启动过于繁重查询。一旦通过应用程序引入和传播,这几乎不可能解决。...使用 Rails 人性化 active-record API,很容易忘记你仍然只是在查询一个复杂关系数据库。它需要微调、调优和调整,以便在合理时间内为你提供数据。...唯一可以保存所有内容地方:你应用程序。 作者简介: Bèr Kessels,经验丰富 Web 开发人员,对技术和开源充满热情。

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

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

十多年前,与当时大多数 Web 应用程序一样,GitHub 也是一个使用 Ruby on Rails 开发网站,它大部分数据都保存在 MySQL 数据库中。...随着 GitHub 增长,这种架构难免会面临巨大挑战。我们努力让数据库系统保持合理大小,并使用更新、更强大机器。任何一个影响 mysql1 故障都会影响所有在这个集群保存数据功能。...模式领域之间有清晰边界,并暴露出各个功能之间模糊依赖关系。...在 Rails 应用程序中,这些信息保存在 db/schema-domains.yml 配置文件中,如下所示: gists: - gist_comments - gists - starred_gists...另一种比较有挑战性情况是 has_many :through 关系导致需要连接来自不同模式领域表。

1.5K11

总结Web应用中常用各种Cache

:etag => [@article.cache_key, current_user_favorited] 另外提一个坑,如果nginx开启了gzip,对rails执行结果进行压缩,会将rails输出...动态请求静态文件化 在rails请求完成以后,将结果保存成静态文件,后续请求就会直接由nginx提供静态文件内容,用after_filter来实现一下: class CategoriesController...cache,更新评论数时候不会更新文章时间,可以将这个counter也加入到key一部分 场景3:复杂页面结构生成 数据结构比较复杂页面,在生成时候避免不了大量查询和html渲染,用片段缓存...,比如我们可以在更新或者删除文章评论时候,自动个更新: class Article has_many :commentsendclass Comment belongs_to :article...,cache设置灵活,也方便扩展,缺点是需要用不同查询方法名(fetch),以及额外关系定义。

4.7K40

如何从 MongoDB 迁移到 MySQL

最近一个多月时间其实都在做数据库迁移工作,我目前在开发项目其实在上古时代是使用 MySQL 作为主要数据库,后来由于一些业务上原因从 MySQL 迁移到了 MongoDB,使用了几个月时间...也就是把所有 embeds_many 和 embeds_one 关系都改成 has_many 和 has_one,同时将 embedded_in 都替换成 belongs_to,同时我们需要将工程中对应测试都改成这种引用关系...通过这段代码我们就可以轻松将原有的嵌入关系全部展开变成引用关系,将嵌入关系变成引用除了做这两个改变之外,不需要做其他事情,无论是数据查询还是模型创建都不需要改变代码实现,不过记得为子模型中模型外键添加索引...在查找到对应数据行之后就非常简单了,我们调用对应 post= 等方法更新外键最后直接将外键保存到数据库中,与数据迁移过程一样,我们在这段代码执行过程中也会打印出当前进度。...,我们只需要在使用 DatabaseTransformer 导入表中所有的数据之后,再通过遍历 posts_tags 表中数据更新多对多关系表就可以了: ?

5.1K52

Active Record基础

对象关系映射: ORM是一种技术手段,把应用中对象和关系型数据库中数据表连接起来,使用ORM,应用中对象属性和对象之间关系可以通过一种简单额方法从数据库中获取,无需直接编写SQL语句,也不过度依赖特定数据库种类...Active Record重要功能有: 表示模型和其中数据 表示模型之间关系 通过相关联模型表示继承层次结构 持久存入数据之前,验证模型 以面向对象形式操作数据库...Active Record 约定 命名约定 Rails把模型类名转换为复数,然后查找对应数据表,Rails提供单复数转换功能非常强大,类名应该使用驼峰命名: ?...创建模型关联,Active Record 会查找这个字段。 主键: 默认情况下,使用证整数字段id作为表主键。...迁移代码储存在特定文件中,可以通过rails命令执行。

3.2K20

如何使用本地 Docker 更好地开发?我们总结了这八条经验

另外,区分系统依赖项(如 ImageMagick)和应用依赖项(如 Rubygems 和 NPM 包)也很重要——前者应该包含在 Dockerfile 中,后者不应该。...将应用依赖项放到镜像中意味着每次有人添加新依赖项时都必须重新构建镜像,这既耗时又容易出错。相反,我们应该将这些依赖项作为启动脚本一部分。...:/app - yarn:/app/node_modules 命名卷挂载点可能因不同软件栈而异,但原则是差不多:将编译依赖项保存在已命名卷中,以大幅缩短启动时间。...5 将临时东西放入命名卷中 上一点提到使用命名卷来提高性能,这里有另一个有用技巧:将保存只读文件目录放入命名卷中,阻止它们被同步回本地机器(这会带来很大性能开销),特别是 log 和 tmp...以上就是我们在过去几年中总结一些 Docker 最佳实践,我们也将努力保持更新这个清单。

2K40

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

没有服务器同学可以在这里购买,不过我个人更推荐您使用免费腾讯云开发者实验室进行试验,学会安装再购买服务器。...自建服务器难免会遇到这样问题,配置SSL很麻烦,虽然对一部分人来说这也是一种乐趣,但是如果您在生产环境使用,我还是建议您直接使用云关系型数据库,云关系型数据库让您在云中轻松部署、管理和扩展关系型数据库...您可以通过运行以下命令查看使用rbenv-vars插件为您应用程序设置环境变量: rbenv vars 如果您更改了密码或数据库密码,请更新.rbenv-vars文件。...我们将生成一个脚手架控制器,以便我们应用程序可以查看: rails generate scaffold Task title:string note:text 现在运行此命令以更新生产数据库: RAILS_ENV...例如: /home/deploy/appname 保存并退出。 现在,您应用程序配置为在启动时通过Upstart启动。这意味着即使在重新启动服务器,您应用程序也会启动。

5.4K10

Gorm

loc=Local" db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) 表操作 自动迁移 自动迁移仅仅会创建表,缺少列和索引,并且不会改变现有列类型或删除使用列以保护数据...db.Model(&user).Association("Languages").Find(&languages) 添加新many2many, has_many关联 // 向user关联Languages...languageZH, languageEN}) db.Model(&user).Association("Languages").Append(Language{Name: "DE"}) 删除源和传递参数之间关系...db.Model(&user).Association("Languages").Count() 删除源和当前关联之间关系,不会删除这些关联 db.Model(&user).Association(...不存在时创建,并指定参数 db.Attrs(User{Age: 20}).FirstOrCreate(&user, User{Name: "lihua"}) // 无论是否存在,都将参数分配到结果并保存到数据库

27030

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

教程准备 本教程假定您将在部署应用程序用户上安装了安装了以下软件Ubuntu 14.04服务器(没有服务器同学可以在这里购买,不过我个人更推荐您使用免费腾讯云开发者实验室进行试验,学会安装再购买服务器...此外,本教程介绍如何设置开发或测试环境。如果您需要帮助,请参考腾讯云+社区中有关PostgreSQL with Rails教程中示例进行操作。...您可以通过运行以下命令查看使用rbenv-vars插件为您应用程序设置环境变量: rbenv vars 如果您更改了密码或数据库密码,请更新.rbenv-vars文件。...,我们将生成一个脚手架控制器,以便我们应用程序可以查看它: rails generate scaffold Task title:string note:text 现在运行此命令以更新生产数据库: RAILS_ENV...在您喜欢编辑器中打开Gemfile(确保您在应用程序根目录中): vi Gemfile 在文件末尾,使用以下行添加Unicorn gem: gem 'unicorn' 保存并退出。

4.2K00

Canvas好难,如何让研发低成本实现Web端流程图设计功能

将数据发送到前端,自动生成一个流程图,如果对流程图做出一定修改,数据也跟着变动,这样流程图数据也可以保存下来,方便下次使用。 假定我们目前有一个这样数据结构(省略部分数据)。...其中elements数组保存了所有的流程,id为流程唯一id值;text代表流程框中文本;type代表是普通流程矩形框还是决策型菱形框;process代表当前流程进展,分为开始、进行中和已完成...根据edge连线关系,将各个形状摆放到正确位置 这一步是比较困难,假设我们流程图是由左向右扩展,那么横坐标(x方向)位置是很好确定,每深入一,横坐标向右移动即可,困难在于纵坐标(y方向...得到节点高度值,就可以计算位置了,这个高度值越大,它离节点纵向距离就越远,当然这里还要考虑当前节点占据兄弟节点第几个,以及、兄弟节点高度情况: 最后代码可以看到这里也是一个递归计算...另外,当位置和长宽变化时,连线也会自动更新,我们需要更新上文提到“是”和“否”文字位置,这里用到了防抖模式以提升性能。

26120

gitlab服务部署及使用

workspace:工作区 12345678910111213141516171819202122232425262728293031 Remote远程仓库: 远程仓库内容可能被分布在多个地点处于协作关系本地仓库修改...,因此它可能与本地仓库同步,也可能不同步,但是它内容是最旧 Repository本地仓库: 这里面保存了对象被提交过各个版本,比起工作区和暂存区内容,它更旧一些 git commit 同步...、大小),不保存文件实体,通过id指向每个文件实体,可以使用git status查看暂存区状态,暂存区标记了你当前工作区中那些内容是被git管理 当你完成某个需求或者功能需要提交代码,那么第一步就是通过...  下面这张图很明确表现了他们关系 ?...,可以随便保存各种历史痕迹,不用担心污染服务器,连不上服务器也能提交代码、查看log。

2.3K20

如何在CentOS 6.5上使用 Nginx+Passenger 部署Railes应用程序

准备Deployment Server 更新和准备操作系统 设置Ruby环境和Rails 下载并安装服务器应用程序 3....建议您可以使用云关系型数据库,云关系型数据库让您在云中轻松部署、管理和扩展关系型数据库,提供安全可靠、伸缩灵活按需云数据库服务。...· 更新操作系统 · 获取必要基本部署工具 · 安装Ruby,Rails和库 · 安装应用程序(即乘客)和HTTP服务器(Nginx)...更新和准备操作系统 为了安装Ruby和其他必要应用程序(例如我们服务器),我们需要首先准备最低限度运送CentOS服务器,并为其配备一些我们在此过程中需要开发工具。...没有服务器同学可以在这里购买,不过我个人更推荐您使用免费腾讯云开发者实验室进行试验,学会安装在购买服务器。

4.9K20

如何在Ubuntu 18.04上使用rbenv安装Ruby on Rails

没有服务器同学可以在这里购买,不过我个人更推荐您使用免费腾讯云开发者实验室进行试验,学会安装再购买服务器。 安装Node.js,您可以参考云加社区专栏文章进行安装配置。...安装完成,您可以安装rbenv并使用它来安装Ruby, 首先,更新包列表: sudo apt update 接下来,安装安装Ruby所需依赖项: sudo apt install autoconf.../2.5.0 设置好gems,即可安装Rails。...Rails是一个复杂Web开发框架,具有许多依赖关系,因此该过程需要一些时间才能完成。最终,您将看到一条消息,指出已安装Rails。及其依赖: ......第五步 - 更新rbenv 由于您使用Git手动安装了rbenv,因此您可以使用~/.rbenv目录中git pull命令随时将安装升级到最新版本: cd ~/.rbenv git pull 这将确保我们使用最新版本

6.2K50

关于 Git 和 GitHub,你所不知道十件事

例如:链接,https://github.com/rails/rails/compare/master@{1.day.ago}…master 显示 Rails 项目中全部昨天开始提交记录和变化: ?...5、.diff 和 .patch 在比较页面、合并请求页面或者评论页面的 URL 增加 .diff 或者 .patch,可以得到 diff 或者 patch 文本格式。...例如:链接 https://github.com/rails/rails/compare/master@{1.day.ago}…master.patch 显示 Rails 项目中全部昨天开始提交记录和变化文本格式...stupid 历史: > git log -S'stupid' 3、git add -p 交互式保存和取消保存变化,使用: > git add -p 4、git rm –cached FILE...例如,在一个功能分支,输入 > git branch --no-merged 返回合并到该分支分支列表。

99720

用 Git 和 Github 提高效率 10 个技巧!

例如:链接,https://github.com/rails/rails/compare/master@{1.day.ago}…master 显示 Rails 项目中全部昨天开始提交记录和变化: ?...5、.diff 和 .patch 在比较页面、合并请求页面或者评论页面的URL增加 .diff 或者 .patch,可以得到 diff 或者 patch 文本格式。...例如:链接 https://github.com/rails/rails/compare/master@{1.day.ago}…master.patch 显示Rails项目中全部昨天开始提交记录和变化文本格式...历史: > git log -S'stupid' 3、git add -p 交互式保存和取消保存变化,使用: > git add -p 4、git rm –cached FILE 这个命令只删除远程文件...例如,在一个功能分支,输入 > git branch --no-merged 返回合并到该分支分支列表。

1K10

用 Git 和 Github 提高效率 10 个技巧!

author=jingweno 显示 jingweno 对 Dynjs 提交记录: 5、.diff 和 .patch 在比较页面、合并请求页面或者评论页面的URL增加 .diff 或者 .patch...例如:链接 https://github.com/rails/rails/compare/master@{1.day.ago}…master.patch 显示Rails项目中全部昨天开始提交记录和变化文本格式...历史: > git log -S'stupid' 3、git add -p 交互式保存和取消保存变化,使用: > git add -p 4、git rm –cached FILE 这个命令只删除远程文件...6、git branch –merged & git branch –no-merged Git操作常用命令都在这里了,点击这里查看。这个命令返回已合并分支列表或合并分支列表。...例如,在一个功能分支,输入 > git branch --no-merged 返回合并到该分支分支列表。

1K20
领券