2009-06-26 19 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的評論,這個問題有點含糊,但也許這讓你朝着正確的方向前進?

相關問題