문제

글쎄, 나는 여기에 매우 기본적인 의심이 있다고 생각합니다.

GAE (Java)에서 앱을 개발하고 많은 엔티티를 반환하는 데이터 스토어에 쿼리를 수행하므로 캐시해야합니다. Memcache를 사용하고 있었고 잘 작동했지만 엔티티 목록을 정적 변수로 유지하면 전체 요청이 Memcache를 사용하는 것보다 두 배나 빠릅니다. 나는 그것이 항상 엔티티를 필사적으로 불러 일으키지 않기 때문이라고 생각합니다.

Memcache에서 정적 변수를 사용하는 단점은 무엇입니까? 클라우드에 내 응용 프로그램의 몇 가지 인스턴스가있을 수 있는지, 따라서 내 정적 변수의 몇 가지 인스턴스가 있을지 모르겠습니까?

내가 캐시하려는 엔터티 목록은 지난주의 최고 (더 큰 점수) 게시물입니다. 나는 그 목록을 가지고 5 개의 임의 게시물을 선택하고 몇 페이지에 보여줍니다.

도와 주셔서 감사합니다!

도움이 되었습니까?

해결책

앱 엔진 스케일링 사용자 수가 증가함에 따라 애플리케이션의 새로운 인스턴스를 생성하여 앱 엔진 스케일입니다. Drudru가 말했듯이, 다른 사용자는 다른 사례로 제공 될 수 있습니다. 일반적으로 Memcache는 전 세계적으로 일관성있는 것을 보관하기에 가장 빠른 장소입니다. 그러나 귀하의 경우 개선의 여지가있을 수 있습니다.

게시물 목록이 있다고 언급하고 사용자에게 표시하려면 5를 무작위로 선택합니다. 2 명의 다른 사용자가 5 개의 다른 세트를 보면 중요합니까? 어쨌든 임의의 것을 선택한다면 아마도 중요하지 않을 것입니다. 그런 다음 전체 게시물 목록을 Memcache에 저장하고 Memcache에서 5 개의 임의의 게시물을 뽑아 정적 변수에 보관할 수 있습니다.

둘째, 당신은 정확히 무엇을 Memcaching하고 있으며, 어떻게 그것을 뽑아 내고 있습니까? Memcache에 전체 게시물을 저장하고 모든 것을 얻은 다음 5를 선택하고 있습니까? 아마도 게시물 목록을 다운로드하고 5를 선택하고 필요한 5 만 얻을 수 있습니까? 당신이 그것이 당신을 늦추는 것이 부식화라고 생각한다면, 이것은 도움이 될 수 있습니다. 게시물을받은 후에 처리를하고 있습니까? 그렇다면 해당 처리 결과가 캐시 될 수 있습니까?

다른 팁

Google은 가상 머신이 느껴질 때 무료로 시작하고 중지 할 수 있기 때문에 다음 요청이 발생할 때 정적 변수 (또는 JVM 메모리의 다른)에 의존 할 수 없습니다. 그것의 외관에서, 그들은 동일한 JVM에서 추가 스레드 대신 추가 JVM을 시작하는 것을 선호하는 것 같습니다.

그러나 데이터가 사라지면 다른 곳에서 데이터를로드 할 수있는 방법이 있다면 정적 변수를 캐시 계층으로 사용할 수 있어야합니다.

또한 메모리 사용량으로 배 밖으로 나가려고하지 않을 것입니다. 메모리를 얼마나 많이 사용할 수 있는지에 대한 할당량이 있어야합니다.

예, 인터넷의 다양한 사용자에게 인스턴스가 동일하다는 보장은 없습니다. 최악의 경우에는 이것을 정적으로 끊임없이 읽을 수 있습니다. Memcache는 더 높은 이용 가능성을 보장합니다. 나는 단지 memcache를 사용하고 앱은 향후 규모의 문제가 없어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top