Ruby   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在Ruby on Rails应用程序中使用MySQL视图来提高性能大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在rails项目(在rails 2.0.5上运行)中有一些性能问题,例如在我的用户管理页面中.

我的用户模型有很多关系(细节,地址,角色…)谁加载了渴望加载.这创建了非常巨大的SQL查询,在某些情况下,加载30个用户需要几分钟的时间.另一方面,去除渴望加载会产生数百个查询,最终我有同样的问题:加载页面很慢.

我曾经在Java&甲骨文,对于我用来创建视图的这种大查询,这些视图被缓存,以便更快的呈现.维护非常无聊,因为我不得不在视图脚本等中手动更新数据库字段.

但是它真的有非常棒的表演….所以我想知道有没有人试图实现一些事情,以利用Mysql视图的主动记录?

我只是做了一些基本测试,这里是我的观点(仅仅是几个例子,我有一个标准的Res​​tful Authentication用户表,一个大的表“个人数据表”):

create view users_vs AS SELECT
users.id,users.login,users.email,details.last_name,details.first_name,details.phone,details.fax,FROM `users`   LEFT OUTER JOIN `details` ON details.user_id = users.id ;

然后一个模型:

class UsersV < ActiveRecord::Base
end

在我的控制台中试过几件事:

u=UsersV.find(:first)  # ok !
u=UsersV.find_by_last_name('smith') #=> ok !
us=UsersV.find_all_by_last_name('smith') #=> ok too !

查看日志,简单查询的处理方式与所有表查询相同

当然,这些假模型只是用来读取数据.

我在想:

>如果有人已经尝试过了?
>如果这是个好主意?
>如果我应该看看像memcached这样的东西…

解决方法

意见的“问题”(在这种情况下,您可能想要一个物化视图,假设复杂查询所基于的数据不会频繁更改)是您在某种程度上违反了Rails的DRY’ness纯粹主义者认为的视图的UserV模型的添加是用户模型的重复.)

因此,理想的解决方案是充分利用复杂查询的RDBMs.如果未缓存的查询仍然需要很长时间才能执行,Memcached将无法帮助您(您仍然需要运行它们来填充memcached),或者如果您无法容纳一点点时间(即缓存结果)必须要实时准确)和/或所涉及的表格经常被修改.

>在MySQL中查看是否可以进一步优化查询,这将需要毫秒而不是秒(添加适当的索引,运行ANALYZE等)>如果您有选择使用/尝试另一个RDBMS(如postgres),一定要试一试.与其他基于成本的引擎(如OraclePOSTGRes)相比,MySQL与复杂的连接(InnoDB)相当糟糕.我从MySQL切换@R_801_4762@s,并且复杂的连接将需要30秒在MySQL(所有索引到位)需要毫秒在POSTGRes.如果使用PostgreS,可以很好地利用pgadminIII的图形说明计划工具.

大佬总结

以上是大佬教程为你收集整理的在Ruby on Rails应用程序中使用MySQL视图来提高性能全部内容,希望文章能够帮你解决在Ruby on Rails应用程序中使用MySQL视图来提高性能所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。