2015-01-31 1 views
0

링크가있는 웹 페이지가있는 JSF (Java Server Faces)를 사용하여 간단한 웹 응용 프로그램을 만들었습니다. 링크를 클릭하면 데이터베이스 (MySQL)로 이동하여 가져옵니다. 항목 목록이며 웹 페이지에 표시됩니다. 나는 Hibernate를 ORM 도구로 사용했다.데이터 기반 웹 응용 프로그램 최적화

나는 쿼리하는 데이터베이스 테이블에 총 10-15 개의 항목이 있으며 최대 절전 모드 쿼리는 "from myObject"와 유사하여 테이블의 모든 항목을 반환합니다.

이제는 해당 링크를 클릭 할 때마다 데이터베이스에 대한 쿼리 수를 제한하여이 응용 프로그램의 성능을 향상 시키려고합니다.

그래서 저는 최대 절전 모드 1 단계 캐싱, 2 단계 캐싱 및 Ehcache에 대해 배우기 시작했습니다. 이제 어떻게 작동하는지 몇 가지 기본적인 이해를했습니다.

여기에 내 질문에

질문입니다 :이 응용 프로그램의 사용자가 n 개의 그룹-G1, G2, ..., GN 각 그룹이 m 사용자가로 분할한다고 가정 해 봅시다. 그룹 g1의 사용자가 해당 링크를 클릭하면 특정 그룹 g1과 관련된 항목 목록을 표시하려고합니다. 기본적으로 나는 웹 페이지의 링크를 클릭 할 때 서로 다른 그룹의 사용자에 대해 서로 다른 항목 목록을 표시하려고합니다. 동일한 그룹의 사용자에게 같은 항목의 목록을 표시하려면 같은 그룹의 사용자가 해당 링크을 클릭하면 데이터베이스 호출을 제한하고 싶습니다. 어떤 사람이 제안을하거나 나에게 앞으로 나아갈 수있는 조언을 해줄 수 있다면 좋을 것입니다.

모든 사용자 그룹에 대해 표시된 데이터를 보유하는 개체와 동일한 개체입니다. 데이터베이스의 항목 (웹 페이지에 표시된 항목 목록)에 대한 추가, 업데이트 및 삭제가 있습니다. 사용자에게 표시되는 항목 목록은 정적이지 않습니다.

답변

0

결과를 캐시하고 현재 사용자의 확인을 기반으로 반환해야 할 수 있습니다. 이것은 Java 클래스의 맵을 사용하여 간단한 방식으로 수행 할 수 있습니다.

+0

그래서 항목을 지속적으로 추가, 업데이트 및 삭제할 때 캐시가 고갈되지 않습니까? 지도와 같은 일부 데이터 구조를 사용하여 응용 프로그램 범위에 넣고 해당지도에 최신 데이터를 보관하면 (추가, 편집 또는 삭제가 일어날 때마다지도를 계속 업데이트) 사용자가 해당 링크를 클릭하면 해당지도가 반환됩니다. 그룹 수가 많으면지도 크기가 커질 수 있습니다 (일부 상당한 양의 메모리가 사용 될 수 있음). 그룹 번호가 큰 다른 그룹에 대해 다른지도를 갖는 것이 바람직하지 않을 수 있습니다. 내가 틀렸다면 나를 바로 잡아주세요. –

+0

구현하려는 캐싱에 비즈니스 규칙이 첨부되어 있습니다. 제 취업은 비즈니스 계층에서 처리해야한다는 것입니다. 기본 데이터에 대한 잦은 쓰기가 있기 때문에 단순한지도가 아닐 것이라는 데 동의했습니다. 이 도메인 스토어 패턴 [http://www.corej2eepatterns.com/DomainStore.htm]이 도움이 될 수 있습니다. 캐시를 유지 관리하려면 상태 관리자를 구현해야 할 수도 있습니다. – Sivaramvt

0

실제로 내 목적을 달성하는 redis를 사용하기 시작했습니다. This은 redis와 그 용도를 설명합니다.