2009-06-26 42 views
5

我们公司喜欢计算晦涩指标的报告 - 这些指标无法通过ActiveRecord的查找程序(find_by_sql除外)进行计算,以及ruport的基于ruby的功能太慢。对于计算量大的查询,find_by_sql的替代方法是什么?

是否有插件或宝石或数据库适配器在那里,将在数据库层进行大型计算?您创建错综复杂的报告的解决方案是什么?

+0

我看到很多人都在看这个问题,但似乎没有人想咬人。有什么禁止人们刺伤或两个? – btelles 2009-06-26 17:02:24

+0

我认为你的问题太含糊了......这个概念听起来很有趣......但是你的具体情况可能不够充分。 – 2009-06-26 20:00:50

+0

在我看来,使用SQL来获取报告有任何问题。请记住80-20%的规则:ActiveRecord可以轻松解决您的CRUD问题,另外20%则由您决定。另外,根据我的经验,报告与您在应用程序中使用的模型没有任何关系。 – Igor 2009-06-27 12:26:40

回答

0

如果您发现ActiveRecord缺乏复杂查询所需的表现力,您可能需要考虑使用DataMapperSequel作为ORM。离开ActiveRecord并不是一个可能的决定,但至少可以进行调查。

1

Thoughtbot的松鼠插件增添了不少红宝石十岁上下功能的ActiveRecord的find方法,与多层条件语句,范围和嵌套模型关联:

www.thoughtbot.com/projects/squirrel/

+0

绝妙的主意!我们已经看过searchlogic和松鼠更有效地生成'where'语句,但是我们遇到的问题是在一个查询中计算多个字段之间的值......我不确定这些将有助于此特定用途案件。但是让我知道他们是否这样做! – btelles 2009-06-29 06:11:27

1

您的报告中是否有固有的东西阻止使用SQL视图或存储过程?

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

YourModel.connection.select_all(query) 

拉回数据。这不是一个最佳方法;我渴望探索改进。

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

+0

是的,我们的商店有一位真正喜欢这种选择的SQL专家。它似乎是一种实用的方法......我没有问题,除了一个......当我创建包括特定于数据库类型的存储过程的迁移时,维护数据库不可知论有点困难。 虽然意见是肯定的争夺!感谢您的意见,并对迟到的回应感到抱歉! – btelles 2009-06-29 06:24:44

2

尽管不是数据库不可知的,但我们的解决方案是plpgsql函数,它使用Ruby和ActiveRecord的速度非常慢。

+0

是的,我们真的试图坚持db不可知论的东西。 感谢您的输入! – btelles 2009-06-29 06:27:34

1

听起来好像你的表格可以正常化。在我工作的一个地方,我们所做标准化的数量影响了我们的报告需求,因此我们创建了一些影子表格,其中包含一些汇总数据,并进行了报告。

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

相关问题