2011-04-22 6 views
0

레일스에서 ​​주로 읽기 전용이며, 매우 매우 업데이트 될 정적 데이터를 포함하는 테이블이있는 응용 프로그램을 개발 중입니다.레일 응용 프로그램 성능 향상 의심

그러나 동일한 쿼리가 테이블에서 여러 번 실행됩니다 (쿼리에는 다른 테이블이 포함되지 않음).

이 작업을 다시하지 않으려면 코드를 통해 일부 캐시 메커니즘을 구현하는 것이 좋습니다 ??

그렇다면 구현하는 가장 좋은 기술은 무엇입니까?

해시 키로 기본 키를 사용하고 쿼리 결과로 GLOBAL 해시 변수를 가질 계획입니다.

  1. 이 기술의 단점이 있습니까?

  2. 내가 볼 수있는 한 가지는 테이블이 업데이트되면 서버를 다시 시작해야한다는 것입니다.

  3. 더 좋은 방법이 있나요?

감사

답변

1
  1. 예, 존재하고 완벽하게 작동하는 항목입니다.

  2. 글쎄, 당신은 물론

  3. 는, 예 있다고 생각하는 이유를 볼 수 없습니다 :

당신의 선택이 더 많거나 적은 :

  • 내장 : memory store

  • 일부 설정이 필요합니다.,

  • 다른 키/값 저장 : http://redis.io/

redis 여기에서 찾아 보게한다 : 동적 데이터에 대한 http://railslab.newrelic.com/scaling-rails

+0

Memcached !!!나는 그것에 대해 너무 많이 들었지만 실제로는 와트를 알기 위해 노력하지 않았다. (귀하의 업데이트에 감사드립니다.) 또한 원래 게시물을 편집 해 주셔서 감사합니다. 이제 훨씬 더 분명 해 보입니다. 다음부터이 방법을 사용할 것입니다. . – rajaramyadhav

0

당신은 Rails.cache을 사용할 수 있습니다 - 당신은 그냥 키를 만료, 캐시를 새로 고침 할 때?

0

간단한 레일의 자신의 조각 캐싱을 사용하는 것입니다. 만료하려면 모델을 변경할 때 호출되는 관찰자 인 스위퍼를 사용하고 캐시를 만료시킵니다. Fragment Caching and Sweepers에 대한 도움말은 See the Rails guide on caching을 참조하십시오.

가이드가 다루지 않는 유일한 사실은 매우 명확합니다. 키 문자열에 레코드 ID가 포함되어 있어야합니다. 좋아요 : <% cache("foo_stuff_#{@foo.id}") do %>