对于计算量大的查询,find_by_sql的替代方法是什么?

时间:2009-06-26 16:02:48

标签: ruby-on-rails ruby ruby-on-rails-plugins

我们公司喜欢计算模糊指标的报告 - 无法使用ActiveRecord的查找程序(find_by_sql除外)计算的指标以及ruport的基于ruby的功能太慢的指标。

是否有插件或gem或db适配器可以在数据库层进行大型计算?您创建复杂报告的解决方案是什么?

5 个答案:

答案 0 :(得分:2)

虽然不是数据库不可知,但我们的解决方案是plpgsql函数,使用Ruby和ActiveRecord变得非常慢。

答案 1 :(得分:1)

Thoughtbot的Squirrel插件为ActiveRecord的find方法添加了许多Ruby-ish功能,具有多层条件,范围和嵌套模型关联:

www.thoughtbot.com/projects/squirrel /

答案 2 :(得分:1)

您的报告中是否有任何固有的内容阻止使用SQL视图或存储过程?

在一个特定项目中,我经常发现一种有用的技术是创建您的SQL查询(可能相当复杂)作为数据库中的命名视图,然后使用

 YourModel.connection.select_all(query)

撤回数据。这不是一种最佳方法;我很想探索它的改进。

不幸的是,正如您所建议的那样,在rails中计算基于数据库的复杂报表的支持似乎相当有限。

答案 3 :(得分:1)

听起来好像你的桌子可以归一化。在我工作的一个地方,我们所做的规范化程度正在影响我们的报告需求,因此我们创建了一些影子表,其中包含一堆汇总数据,并对此进行了报告。

我同意Neil N的评论,这个问题有点模糊,但也许这会让你朝着正确的方向前进?

答案 4 :(得分:0)

如果您发现ActiveRecord缺乏复杂查询所需的表现力,您可能希望使用DataMapperSequel作为您的ORM。远离ActiveRecord并不是一个可能的决定,但至少可能值得研究。