2011-01-31 2 views
1

일부 값으로 데이터 저장소를 채우고 싶습니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 이 내 코드입니다 -데이터 저장소 항목을 채우는 Google App Engine

for n in range(seqlen): 
    for m in range(n+1): 
    for l in range(m+1): 
     temp = [-BIGINT for k in range(m-l+1)] 
     obj = DbEntity4D(key_name=str(n)+','+str(m) +','+ str(l)) 
     obj.value = temp 
     obj.put() 

또는이 하나 더?

for n in range(seqlen): 
    for m in range(n+1): 
    for l in range(m+1): 
     temp = [-BIGINT for k in range(m-l+1)] 
     obj[i] = DbEntity4D(key_name=str(n)+','+str(m) +','+ str(l)) 
     obj[i].value = temp 
     i = i+1 

    db.put(obj) 

다른 좋은 방법이 있습니까?

seqlen은 1에서 1000이 될 수 있습니다.이 전체 프로세스를 10 분 내에 완료하지 못할 수도 있지만 이전에 다음 작업에서 남긴 부분부터 계속할 수 있습니다.

답변

2

데이터 스토어 배치를 일괄 처리하면 데이터 저장소로의 왕복을 없앰으로써 상당한 시간을 절약 할 수 있습니다.

나중에 코드 블록 (m 엔티티 저장시)으로이 작업을 수행하려는 것 같습니다. seqlen이 1000 인 경우 한 번에 최대 1,000 개의 항목을 쓸 수 있습니다. 그러나 한 번에 작성된 번호 엔터티는 가장 안쪽의 for 루프가 생성하는 엔터티 수에 따라 달라지기 때문에 다릅니다. DbEntity4D 엔티티를 n (일부 큰 수)을 수집 할 때까지 데이터베이스에 저장하기 위해 대기 한 다음 저장하십시오 (가장 안쪽 루프 이후에 항상 저장하는 것이 아니라). 물론 이것은 다음 태스크가 이전 태스크가 중단 된 이들 엔티티 작성 추가를 재개하도록하는 논리를 복잡하게 만들 수 있습니다.

+3

에 동의했습니다. 또한 remote_api 스크립트를 하나의 요청이나 작업으로 수행하려고 시도하는 대신 remote_api를 사용하는 것이 좋습니다. 왜냐하면 앱 엔진 외부에서 실행되는 remote_api 스크립트는 원하는만큼 실행될 수 있기 때문입니다. – ryan

관련 문제