2014-04-08 3 views
0

개체 목록을 효율적으로 캐시하는 방법에 대한 질문이 있습니다. 샘플 테이블은 Trip입니다. Trip은 각각 DateFromDateTo입니다. Trip의 목록을 캐시하고 싶습니다. 내가 Trip의 ValueObjects의 Trip의 형태로 데이터베이스 및 캐시 목록을 받고 고려동적으로 개체 목록 변경 캐싱

첫 번째 접근 방식의 X 분 (값 개체에 의해 나는 목록에 여행을 표시하는 데 필요한 모든 데이터를 의미한다). 이 접근법은 매우 간단하지만 몇 가지 단점이 있습니다. - 페이지 매김 처리 - 페이지별로 페이지를 저장하는 경우 (예 : TripsP1, TripsP2 등). GUI에서 페이지 크기가 변경되면 다른 키 (예 : TripsP1Size1, TripsP1Size2 등의 키를 사용하여 일련의 여행을 만들어야 함) - 정렬 된 목록을 처리하는 방법? 각 필터 조합에 대해 서로 다른 키를 사용하여 Trip 세트를 유지 하시겠습니까?

두 번째 접근 방식은 데이터베이스마다 hittng 데이터베이스를 고려하지만 데이터베이스에서 Trip.Id 만 가져옵니다. 다음으로 각 캐시를 Trip ValueObject (으)로 가져 오려고합니다. Trip을 생성하거나 수정 한 후 캐시에 TripId 키를 입력합니다. 또한 어떤 이유로 캐시에서 Trip ValueObject을 찾을 수없는 경우 데이터베이스에서 가져 와서 캐시에 넣습니다.

어떤 방법으로 접근하면 좋을까요? 아니면 좀 더 효율적으로 제안 할 수 있을까요?

답변

0

왜 그 여행을 페이지 형태로 유지해야하는지 알 수 없습니다.

모든 여행을 목록 (원하는대로 정렬 할 수 있음)에로드하고 Linq 검색 쿼리에 대한 메모리 내 색인을 작성하지 않는 이유는 무엇입니까? 예 : this lib.

응용 프로그램 쿼리 패턴에 따라 매우 빠른 검색을 위해 캐시의 메모리 인덱스를 만들 수 있습니다.

트랜잭션이 진행 중일 때 Trips 변경 사항이 걱정된다면 (모든 캐시가이 시점에서 놓칠 수 있음) Immutable 콜렉션을 사용하여 구현해야합니다 (트립 불변 유형으로 지정).

사용자가 특정 조건으로 항목을 제공하도록 서버에 요청하면 이러한 항목을 쉽게 선택하고 데이터 스트림을 가져 오기위한 IQueryable (IEnumarable 시퀀스) 메서드를 제공 할 수 있습니다.

희망 사항은 Ofir입니다.