내 코드는 때때로 다소 수다스러운 방식으로, DB 쿼리를 많이한다 : 위의 코드 만 특별 관리 페이지에서 호출Play Framework 용 쿼리 최적화 레이어를 작성하는 일반적인 방법은 무엇입니까?
// Process all users:
for (User u : users) {
// multiple queries per single user
w = Website.find("owner = ?", u.id);
d = Demo.find("...");
...
}
, 그래서 슈퍼 빠른 될 필요가 없습니다,하지만 난 ' 합리적인 성능을 얻고 싶습니다. 완전히 다시 작성하지 않고이를 수행 할 수있는 일반적인 방법이 있습니까?
내가 상상하는 것은 같은 물건을 할 수있는 재생 모듈은 다음과 같습니다
이와 같은// Preprocess - warm cache
Website.findAll();
Demo.findAll();
// After the above code was run, all the data is cached in the scope of this request, so
// the following code should now not do any fetches to the database
// Process all users:
for (User u : users) {
// multiple queries per single user
w = Website.find("owner = ?", u.id);
d = Demo.find("...");
...
}
그것을 시도하고 최적화 층을 구축하는 것이 맞습니까? 어떻게 접근할까요?
이점은 필자가 보았 듯이 프로토 타이핑 단계에서 "바보 같은 코드 작성"을 할 수있게 해주고 필요시 적절한 수준으로 쉽게 최적화 할 수 있다는 것입니다. 물론 최적의 성능에 도달하지 못하고 실제로 큰 테이블에서는 작동하지 않지만 특정 작업에서는 유용 할 수 있습니다.
또는 ... "마법의"캐시 계층에 의존하지 않고 대신 코드를 처음부터 다시 작성해야합니까?
그런 코드를 작성한 경우지도를 사용할 수도 있습니다. 요청의 시작 부분에있는 모든 엔티티를 읽고 Map에서 읽은 다음 요청이 끝나면 Map이 삭제됩니다. 적은 코딩이 필요한 솔루션이 있는지 이해하려고 노력하고 있습니다. – ripper234
Play는 기본적으로지도보다 더 정교한 memcache를 사용합니다. 코드를 변경하지 않고 ehcache를 분산 캐시로 사용할 수도 있습니다. 이것은지도보다 훨씬 더 좋은 옵션입니다. 물론 바퀴를 재발 명하려는 경우 맵을 사용할 수 있고 TTL과 캐시 시스템의 모든 기능을 구현할 수 있습니다. – emt14