2013-06-24 2 views
1

안녕하세요. Google 웹 로그 분석 엔진을 사용하여 사진 호스팅 웹 사이트를 만들고 각 페이지에 5 개의 이미지가 저장되어 있습니다. 이후에 나에게 알려줄 부울을 얻고 싶습니다. 페이지 (내림차순으로 저장 됨). 페이지 제한과 페이지 번호가 있으므로 다음과 같은 데이터 저장소 쿼리가 필요합니다.Google Datastore로 날짜 내림차순으로 n 번째 rownum 가져 오기

rownum pagenumber * pagelimit에 대한 단일 값을 얻습니다 (페이지에 표시된 5 개 이후에 저장된 값이 있는지 확인).

Query query = new Query("PicturePost").addSort("date",Query.SortDirection.DESCENDING); 
    List<Entity> results; 

    results = datastore.prepare(query).asList(FetchOptions.Builder.withLimit(pageLimit) 
            .offset(pageLimit*(pageNumber))); 

    boolean lastPage = results.isEmpty(); 

을하지만, 다음 페이지에서 모두 5 엔티티를수록이 비효율적 :

는 현재 내가있다.

누구든지 도와 주시면 감사하겠습니다. 감사합니다.

답변

1

이것은 나를 위해 꽤 잘 작동하는 것 같습니다. YMMV. 시리얼 액세스가 필요한 엔티티에는 항상 date_created 필드 [auto_now_add = True]가 포함됩니다. 브라우저 클라이언트는 반환 할 number_of_images와 date_limit의 두 가지 입력으로 처리기 함수를 호출해야합니다. 첫 번째 호출에는 date_limit에 대한 빈 문자열이 있으므로 현재 시스템 datetime을 사용합니다. 다른 전화에는 이전 전화에서 보낸 가장 빠른 날짜가 포함됩니다.

쿼리는 (date_created < date_limit) 및 date_created DESC가됩니다. 원하는 이미지 수만큼 keys_only 가져 오기를 수행하고 img src = "key_goes_here"설정을 위해 키를 다시 보냅니다. 원하는 이미지 수보다 적게 반환하거나 0이면 새 이미지가 없습니다.

활성 페이지 인 경우 자동 memcaching에 ndb를 사용하고 콘텐츠 헤더에 캐시하도록 브라우저에 알려야합니다. (db를 사용하면 간단한 memcache 함수를 쉽게 작성할 수 있습니다.) 예. N 이미지를 반환하기 때문에 낭비되는 호출 시간이 작고 다음 호출이 0을 반환한다는 것을 모릅니다. 슈퍼 액티브 사이트 인 경우 put() 이미지에 date_created가 중복되어있을 수 있습니다. 사용자 정의 색인의 오버 헤드를 가지고 있지만, 어떤 방법으로도이 비용이 발생할 것입니다. 많은 GAE와 마찬가지로 종종 절충점이 있습니다. HTH. -stevep

관련 문제