2009-06-26 3 views
5

저희 회사는 ActiveRecord의 파인더 (find_by_sql 제외)로는 계산할 수없는 메트릭과 ruport의 루비 기반 기능이 너무 느린 메트릭스를 계산하는 보고서를 좋아합니다.computationaly-heavy 쿼리에 대한 find_by_sql의 대안은 무엇입니까?

데이터베이스 계층에서 큰 계산을 수행 할 수있는 플러그인 또는 보석 또는 db 어댑터가 있습니까? 복잡한 보고서를 작성하는 방법은 무엇입니까?

+0

많은 사람들이이 질문을보고 있지만 아무도 물지 않으려는 것 같습니다. 사람들이 찌르는 것을 금지하는 것이 있습니까? – btelles

+0

나는 당신의 질문이 다소 모호하다고 생각한다. 개념은 많은 재미를 얻는다. 그러나 당신의 구체적인 시나리오는 충분히 설명되지 않을 수도있다. –

+0

제 생각에는 SQL을 사용하여 보고서를 작성하는 데는 문제가 있습니다. ActiveRecord를 사용하면 CRUD 문제를 쉽게 해결할 수 있으며 나머지 20 %는 귀하의 책임입니다. 또한, 내 경험 리포트에서 귀하의 응용 프로그램에서 사용하는 모델과 아무 상관이 없습니다. – Igor

답변

0

ActiveRecord에 복잡한 쿼리에 필요한 표현력이 부족하다면 ORM에 DataMapper 또는 Sequel을 사용하는 것이 좋습니다. 액티브 레코드 (ActiveRecord)에서 탈피하는 것은 결정을 내리는 것이 아니라 적어도 조사할만한 가치가있을 수 있습니다.

+0

지금 당장이 작업을 수행하기에는 너무 늦기는하지만 앞으로는 이것이 우리의 선택이 될 것이라고 믿습니다. 필자는 DataMapper를 많이 보지 못했지만 많은 좋은 이야기를 들었습니다. 고마워 피트! – btelles

1

Thoughtbot의 다람쥐 플러그인, 다층 조건문으로, 액티브의 찾기 방법 루비 틱 기능을 많이 추가 범위, 중첩 된 모델 협회 :

www.thoughtbot.com/projects/squirrel/

+0

우수 아이디어! 우리는 where 문을보다 효과적으로 생성하기 위해 searchlogic과 squirrel을 살펴 보았습니다 만, 우리가 직면하게되는 문제는 하나의 쿼리에서 여러 필드 사이의 값을 계산하는 것입니다 ...이 특정 사용에 도움이 될지 확실하지 않습니다. 케이스. 그러나 그들이하는 경우 나에게 알려주세요! – btelles

1

SQL 뷰나 저장 프로 시저를 사용할 수 없게하는 보고서가 본질적으로 있습니까? 하나 개의 특정 프로젝트에서

, 나는 종종 유용한 기술은 데이터베이스의 이름을보기로 SQL 쿼리를 (즉, 매우 복잡 할 수있다) 만든 다음 다시 끌어

YourModel.connection.select_all(query) 

을 사용하는 것입니다 데이터. 그것은 최적의 접근법이 아닙니다. 나는 그것에 대한 개선을 모색하고 싶다.

불행히도, 제안한 것처럼 레일에서 복잡한 데이터베이스 기반 보고서를 계산하는 지원은 상당히 제한적인 것으로 보입니다.

+0

예, 저희 가게에는 그 옵션을 정말 좋아할 SQL 전문가가 있습니다. 실용적인 접근법처럼 보입니다 ... 저도 마찬가지입니다. 데이터베이스 유형에 특정한 저장 프로 시저를 포함하는 마이그레이션을 생성 할 때 db 애칭을 유지하는 것은 약간 어렵습니다. 조회수는 확실히 올라갑니다! 의견을 보내 주셔서 감사 드리며 늦게 답변을 드려 죄송합니다. – btelles

2

비록 데이터베이스에 독립적 인 것은 아니지만, 우리의 솔루션은 plpgsql 함수로 Ruby와 ActiveRecord를 사용하는 것이 매우 느립니다.

+0

예, 우리는 실제로 DB에 무관심한 것을 고수하려고합니다. 입력 해 주셔서 감사합니다! – btelles

1

테이블을 정규화 할 수있는 것처럼 들립니다. 일한 곳에서 우리가 수행 한 정규화 작업의 양은보고 요구에 영향을 미치므로 많은 양의 집계 데이터가 포함 된 섀도우 테이블을 만들고이를보고했습니다.

Neil N의 의견에 약간의 애매한 질문이 있지만 올바른 방향으로 나아갈 수 있습니까?

+0

네, 그 질문은 확실히 모호합니다. 그러나 데이터 정규화는 약간 다른 문제를 해결할 것이고 데이터를 추가로 정규화하면 쿼리가 좀 더 느려질 것입니다. 그래도 기여해 주셔서 감사합니다! – btelles

+0

내가 의미 한 바는보고 목적을 위해 표준화를 해제하는 것입니다. –

관련 문제