2012-08-05 1 views
1

다음과 같은 상황이 있습니다 (레일 3) : 내 테이블에 각 사용자에 대한 금융 트랜잭션이 포함되어 있습니다 (사용자가 제품을 사고 팔 수 있음). 이러한 거래가 많이 발생하기 때문에 현재 사용자와 관련된 통계를 웹 사이트에 표시합니다. 예 : 현재 잔액, 전체 이익, 전체 판매/구매 한 제품 수, 평균 등 (전체 대신 월/년 기준으로 동일). 이 정보의 일부는 여러 양식/페이지로 사용자에게 표시되므로 사용자는 항상 현재 계정 정보를 볼 수 있습니다 (통계의 다른 비트는 다른 페이지에 표시됩니다).데이터베이스 사용자 데이터에 대한 많은 통계 계산 : 성능 최적화

내 질문은 : 어떻게 데이터베이스 성능을 최적화 할 수 있습니까? 물론 사용자가 탐색 중이라면 기본 데이터베이스가 변경되지 않는 한 새 페이지가로드 될 때마다 모든 값을 다시 계산할 필요가 없습니다.

첫 번째 해결 방법은 금융 거래가 추가/편집되면 (레일스에서 ​​아마도 after_update?를 사용하여)이 통계를 자체 테이블에 저장하고 업데이트하는 것입니다. 예를 들어, 새로운 트랜잭션이 만들어진 경우,이 작업을 계속 진행하면 모든 것을 다시 계산하는 대신 평균을 수정할 수 있습니다.

제 생각에는 어떤 종류의 캐싱 (가능하면 가능합니까?)을 사용하거나 이러한 값을 세션 개체에 저장하는 것입니다.

현재 가장 많은 금융 거래 횟수가 7000-9000의 범위에 있으므로 어느 것이 권장/권장 방법입니까, 아니면이 모든 것이 시간 낭비입니까?

답변

0

요약 테이블 (구체화 된보기라고도 함)을 조사하려고합니다.

이 링크는 도움이 될 수 있습니다 만 9000 트랜잭션이 아마 필요가 없습니다

http://wiki.postgresql.org/wiki/Materialized_Views

+0

있지만. –

+0

감사합니다 이것은 내가 찾고있는 것이 었습니다. ActiveRecord 콜백을 사용하려고했으나 나중에 확장 성 문제가 발생할 수 있기 때문에이를 결정했습니다. 구체화 된 뷰에 대해 읽는 동안 나는 훌륭한 읽을 거리 인 'Enterprise Rails'라는 책을 보았습니다! – apotry