5

"계산 된"또는 "집계 된"데이터, 즉 사용자가 저장 한 데이터에 값 비싼 연산을 수행하여 계산 된 정보가 많은 레일스 앱을 만들고 있습니다. 나는이 데이터를 저장하는 방법이 필요하다고 생각하고 있습니다. A. 값 비싼 DB 연산을 계속해서 수행하지 않고 B. 주어진 속성에 대해 시간이 지남에 따라 예쁜 그래프로 "보고서"를 낼 수 있습니다.집계 된 정보를 저장하는 레일

이 기능을 구현하는 가장 좋은 방법은 무엇입니까? 주어진 모델에 대해 값 (숫자)을 계산하고 저장해야하며 시간이 지남에 따라 그 값이 어떻게 변하는 지 알아야합니다. 나는 이것이 효율적이고 복제 및 데이터를 피하기를 원합니다. 레코드는 일단 생성되면 수정 될 것이므로 고려해야 할 사항이 많아서 변경되는 것에 대해 걱정할 필요가 없습니다.

나는 이것에 대한 가장 일반적인 접근 방식이 무엇인지, 그리고 이것을 Rails 앱에서 어떻게 구현해야하는지 궁금했다.

답변

1

저는 비슷한 문제에 대해 작업 해 왔으며 잘못된 방식으로 작업 한 응용 프로그램도 작업했습니다. 여기

내 모범 사례 추천 :의,하자

  • 스토어 모델의 원시 데이터 호출 Feed
  • 이 계산 된 값을 보유하고 다른 모델 일대일 연결을 설정 , 예. FeedStats. 정확한 대소 문자에 따라 일대 다 (one-to-many) 연관 또는 다 대일 (many-to-one) 일 수도 있습니다. 일부 Feed 개의 레코드를 일종의 집계로 롤백 할 수 있습니다.
  • 원본 데이터를 모두 보관하십시오. 나중에 계산을 다른 알고리즘으로 전환하고 이전 데이터를 다시 계산하거나 계산에서 버그를 발견해야하는 경우 매우 유용합니다.
  • 다음을 사용하여 백그라운드 작업에 대한 계산을 설정합니다. Resque (스케줄러 유무와 상관없이), DelayedJob 또는 이와 유사한 도구.

좀 더 구체적이고 정확한 문제의 몇 가지 예를 들면, 몇 가지 구체적인 팁을 줄 수 있습니다. 행운을 빕니다.

+0

답장을 보내 주셔서 감사합니다. 몇 가지 모델에 숫자 속성 (일부 db 열, 값을 계산하는 일부 메소드)이 있습니다. 시간 경과에 따른 변화를 그래프로 나타내고 싶습니다. 가장 간단한 방법은 범위의 모든 값을 선택하고 캐시에 내장 된 레일을 사용하여이 쿼리를 캐시하는 것입니다. 그런 통계를 산출하기위한 표준 방법이 있는지 궁금한가요? 내가 옳은 줄을 따라 보이는이 보석을 보았다 : https://github.com/acatighera/statistics - Thanks again :) – Fred

+0

나는 이걸 가로 질러 가지 않았지만 재미있어 보인다. –