2014-09-03 2 views
0

많은 엔티티에서 페이지를 가져오고 싶습니다.ndb [GAE/Python]에서 많은 엔티티를 페이징하는 방법

모델 내가 지수 5000

entities = Model.query().fetch(10, offset=5000) 

을 얻으려면 10000 개체,
하지만,이 안티 패턴이다.

사용 커서 패턴,

entities, cursor, more = Model.query().fetch_page(10) // 0〜10 
entities, cursor, more = Model.query.fetch_page(10, start_cursor=cursor) // 10〜20 

이 시작 커서를 얻을 수있다.

cursor = ??? // how to get a cursor start index 5000. 

커서를 가져오고 싶습니다.
좋은 아이디어입니까?

답변

0

GAE가 임의 액세스를 지원하지 않는다고 생각합니다. 따라서 오프셋이 필요한 이유입니다. 나는 당신의 질문을 이해하지 못한다. 당신은 커서 패턴을 알고 있으며 이미 커서를 리턴한다. 커서는 페이징을위한 것이고 오프셋은 일반적으로 일부 엔티티를 건너 뛸 것이라고 생각합니다.

+0

그래,하지만 Offset의 "이상한"일은 여전히 ​​IT가 읽은 데이터를 읽는다는 것입니다. 데이터 저장소가 어떻게 구축되어 있는지에 따라 결과를 검색하기 전에 오프셋을 "검색"하게됩니다 ... 즉 오프셋보다 많은 비용을 지불해야 할 수도 있습니다. – Patrice

+0

앞서 언급했듯이 오프셋은 일반적인 것입니다 방법. 가져 오기 페이지를 사용하려면 다음 페이지와 이전 페이지 만 호출해도 괜찮습니다. 내 생각에 모든 데이터베이스에서 오프셋을하면 여전히 오프셋을 검사합니다. GAE에있는 것만으로도 요금이 청구됩니다. 비슷한 질문 http://stackoverflow.com/questions/10291291/what-is-the-cost-difference-between-paging-with-a-cursor-orusing-offset – marcadian

+0

나는 당신의 대답에 관해서 특별히 말하지 않았다. , @ kuninori에 대한 경고로 더. 분명히 항상 스캔을 상쇄합니다. 하지만 당신이 말했듯이, GAE에서 당신은 그것을 지불합니다. 나는 실제로 같은 페이징에 있다면 페이징을 가져오고 페치를 할 것입니다 :) – Patrice

관련 문제