2012-07-27 7 views
0

많은 데이터를 처리하므로 약 1 분 정도 소요되는 쿼리가 있지만 웹 사이트에 결과를 넣고 싶습니다. 확실한 결론은 캐시하는 것입니다 (맞습니까?)하지만 시간이 지남에 따라 데이터가 변경되므로 24 시간마다 캐시 된 페이지를 자동으로 다시 작성하는 방법이 필요합니다.캐싱과 비슷한 것을 찾고 있습니다.

누군가이 방법을 가르쳐 줄 수 있습니까?

편집 : 문제의 페이지가 표시되지 않지만 쿼리 실행에 걸리는 시간이 표시되도록 "톱 10"유형을 만들고 싶습니다.

+0

캐시 + cron ... – apneadiving

답변

0

24 시간 TTL (만료) 쿼리 결과를 캐시하면 정상적으로 작동합니다. 이것이 페이지의 덩어리라고 가정하고 조각 캐시를 사용하십시오.

캐시를 저장하기 위해 memcached 또는 redis를 설정할 수 있습니다. 당신이 할 수있는 또 다른 일은 불운 한 사용자가 당신을 위해 캐시를 생성 할 필요가 없도록 24 시간마다 (또는 원하는대로) 캐시를 데우는 작업을 설정하는 것입니다.

캐시가 만료 된 시점을 데이터베이스의 상태 또는 변경 사항을 기반으로 알면이를 기반으로 캐시를 만료시킬 수 있습니다. 많은 시간 동안 나는이 과정에서 도움이되는 캐시 키의 일부로 필드에서 생성되거나 업데이트 된 것을 사용합니다.

부러워하는 실험실과 새로운 유물에 의해 스케일링 레일 screencasts에 좋은 물건이 있습니다. http://railslab.newrelic.com/scaling-rails, 약간 구식이지만 원리는 여전히 동일합니다.

또한 캐싱 레일 가이드를 확인하십시오.

http://guides.rubyonrails.org/caching_with_rails.html 마지막으로 확인 인덱스가 제대로 설치되어 확인, 사용 thoughtbots 여기에 게시 : 내 전화에 http://robots.thoughtbot.com/post/163627511/a-grand-piano-for-your-violin

입력 한 오타에 대한 사과 있도록.

0

쿼리를 조금 넘어서 생각하십시오. 사용자가 많은 양의 데이터를 볼 수 있도록하는 것이 목표라면, UI를 압도 할 괴상한 쿼리를 사용하지 않고 데이터를 원하는대로 수집하십시오. 결과는보기 좋을뿐만 아니라 훨씬 빨라졌습니다.

이 패턴의 개인 트릭은 DataTables입니다. Ajaxed 쿼리 (내장되어 있음)를 사용하여 사용자가보고 싶어하는 시간에 쿼리의 데이터를 "청크"로 가져올 수있는 그리드입니다. 코드에 대한 간단한 추가와 함께 정렬, 페이지, 필터링, 제한 및 검색까지 할 수 있습니다. 심지어 플러그인을 사용하여 Excel, PDF 등으로 결과를 내보낼 수도 있습니다.

Datatables는 다른 사람이 가지고 있지 않은 가장 큰 특징은 "파이프 라이닝"이라는 개념으로 표시 할 금액을 얻을 수 있다는 것입니다 20)와 추가 금액을 전방 및/또는 후방으로 추가합니다. 이렇게하면 관리 가능한 쿼리를 계속 수행 할 수 있지만 사용자가 "다음 페이지"를 누를 때마다 데이터베이스에 도달 할 필요가 없습니다.

수백만 건의 레코드를 처리하는 앱이 있습니다. 모든 데이터에 대한 하나의 쿼리는 불가능합니다 .... 너무 오래 걸릴 것입니다. 그러나 한 번에 25를 잡는 것은 번개가 빠르며 속임수가 필요하지 않습니다. 일단 데이터 테이블이 올라 오면 필자는 쿼리 성능을 조정하고, 필요에 따라 인덱싱을 수행하며, 훌륭하고 응답 성이 좋은 앱입니다.

<table id="example"></table> 

$('#example').dataTable({ 
    "bProcessing": true, 
    "bServerSide": true, 
    "sAjaxSource": "/processing/file.php" 
}); 
+0

이게 내가 필요한 것 같지 않습니다. 필자의 경우 몇 분마다 새로운 데이터가 테이블에 추가되므로 쿼리에 의해 반환 된 평균은 매번 다른 수를 줄 수 있습니다. – Julian

+0

페이지의 자동 업데이트/업데이트 합계는 간단합니다. 요점은 사용자가 UI를 표시 할 때 필요한 데이터 만 가져 오는 것입니다. 몇 분이 걸리는 쿼리가 있으면 심각한 양의 데이터를 가져 오거나 너무 비효율적입니다. 수백만 개의 레코드가있는 테이블에 복잡한 조인을 할 수 있으며 UI가 5 초 이내에 응답 할 수 있습니다. – bpeterson76

+0

미안하지만 이건 내 잘못입니다. 제 문제를 충분히 설명하지 못했습니다. 나는 많은 데이터를 표시하고 있지만 수백만 행에서 상위 10을 가져 오는 것이 문제가되지 않도록 상위 10 개 목록으로 작업하고 있습니다. – Julian

0

는 일정 시간 후 자동으로 만료를 허용하는 캐시 저장소를 사용

다음은 간단한 예입니다.

Memcached가 그것을 수행합니다. Redis 역시 그렇습니다.

+0

예, 확실히 redis가이 작업을 수행합니다. –

관련 문제