2011-09-15 2 views
0

나는 확장성에 약간의 문제가있다. 내 데이터 저장소를 쿼리하기 위해 JDO를 사용하고 있습니다. 주어진 엔티티의 모든 키를 검색해야합니다 (이러한 키의 유형은 Long입니다). 내 데이터 스토어에서 그러한 엔티티가 1.000.000 개의 레코드를 가지고 있다고 가정하면이 세트를 백그라운드 태스크에서 반복하기 위해 매우 효율적인 방법으로 가져와야합니다.GoogleAppEngine의 JDO : 대량의 레코드에서 필드의 서브 세트를 효율적으로 검색하는 방법

가장 효율적인 방법은 무엇입니까?

키가 필요하고 다른 필드가 필요한 경우 어떻게해야합니까? 의 내가 TPIMAGE라는 실체를 가지고 있다고 가정 해 봅시다 :

Long idPic; //this is my key 
    String title; //this is the field I want to retrieve together with the key 
    ... // other properties 

어떻게 idPic과 제목이 모두 하나의 효율적인 쿼리에서 검색 할 수있다?

Query q = new Query("select idPic, title from " + TPImage.class.getName()); 

하지만 더 효율적으로 뭔가?

대단히 감사합니다! 당신이 그 (것)들을 효율적으로 충분히 가져올 수 없습니다하지 않는 것이 -

안녕 cghersi

+0

실제로 데이터와 키를 원한다는 사실을 반영하여 제목을 수정했습니다. 그렇지 않으면 키만 쿼리 할 수 ​​있습니다. –

답변

1

당신이 스케일링 문제는 당신이 모든 키를 필요로한다는 것이다. 어떤 시스템을 사용하든 관계없이 항상 최소한 O (n)이 될 것입니다.

모든 것을 미리 가져 오기보다는 일괄 작업을 수행하고 cursors을 사용하여 다음 결과 집합을 효율적으로 검색해야합니다.

모델에서 필드가 필요한 경우 전체 모델 인스턴스를 검색해야합니다. 즉, 직렬화 된 모양으로 저장되므로 하나의 필드 만 검색 할 수는 없습니다.

+0

그래서, 토론의 끝 : blob serialization은 객체 필드의 서브 세트 만 효율적으로 가져 오는 것을 막아줍니다 ... 정말 고마워요. –

0

귀하의 질문에 2 부분이 있습니다. 키만 가져 오는 첫 번째 부분에서는 keys_only 매개 변수를 True로 설정하여 키를 반환 할 때 키를 반환하도록 지정해야합니다. 는 여기를 참조하십시오 당신은 전체 개체를 검색하지 않는 한 http://code.google.com/appengine/docs/python/datastore/queryclass.html#Query

이 은 다소 도움이 될 것입니다. 그러나, 한 번에 1,000,000 개를 모두 처리하려면 충분하지 않을 수 있습니다. 이 경우 Nick의 조언을 듣고 작업을 중단하십시오.

관련 문제