2012-02-19 4 views
4

기존 레코드를 업데이트하는 일괄 처리 put에 대해 하드 제한 또는 성능 저하 제한이 있습니까? 몇 천 개의 기존 레코드가 처리되는 작업 큐 프로세스가 있습니다. 프로세스 루프가 끝나면 모든 레코드에 대해 인덱싱 된 BooleanProperty가 False에서 True로 변경됩니다. 한 번에 5,000 개의 레코드를 처리하는 것과 배치 배치를 중첩하는 것의 결과가 있습니까? 10 번의 반복 업데이트가 한 번에 500 번 수행됩니다. TIA -stevep일괄 처리 put() 제한

답변

6

일괄 처리 API는 필요에 따라 큰 요청을 분할하므로 대부분 직접 처리 할 필요가 없습니다. 라이브러리는 서비스 호출의 전체 크기 및 단일 호출에 넣을 수있는 엔티티의 수와 같은 제한을 관리하고 서비스에 대해 적절한 수의 호출을 수행합니다. (도서관 코드에 따르면, 이것은 1 메가 바이트와 500 개의 엔티티 인 것처럼 보입니다. 그러나 앱은 그것을 알 필요가 없으며, 변경 될 수 있습니다.) put() 호출을 분리 할 때 장점이 없으며 시도 할 경우 실수로 더 많은 서비스 호출을 할 수 있습니다.

+5

하나의주의 사항 : 엔티티의 복잡성에 따라 (대개 등록 정보의 수, 목록 속성을 여러 번 계산하여 결정됨), 프로토콜 객체에 대한 5000 개의 엔티티 변환 (요청에 직렬화되기 전에 필요함)) 많은 RAM을 사용할 수 있습니다. Dan Sanderson이 언급 한 배치 분할은 불행히도 메모리에있는 protobuf 객체의 수를 동시에 최소화하지 않습니다. 따라서 메모리 오류가 발생하면 직접 작은 배치를 만들어 실제로 도움이 될 수 있습니다. –