2013-02-26 2 views

답변

5

엔티티가 PartitionKey/RowKey 조합으로 저장되므로 첫 번째 파티션부터 순차적으로 스캔이 수행됩니다.

2

Gaurav Mantri가 정확합니다.

병렬로 수행하려면 모든 가능한 PartitionKeys를 필터링 한 다음 해당 쿼리를 코드에서 병렬로 수행해야합니다. 이것은 꽤나 다른 것들에 의존하기 때문에 (더 빠르고/더 쉽고/더 낫다) "더 좋을"수도 아닐 수도 있습니다.

궁극적으로, 나는 전형적인 상황을 위해 이것을 권고하지 않을 것이다. 데이터를 다르게 구성하는 것이 좋습니다.

+0

답변 해 주셔서 감사합니다. 필자가 보는 바와 같이, 파편의 요점은 많은 짧은 데이터 세트에 대해 당황스러운 병렬 쿼리를 실행할 수 있어야한다는 것입니다. 자신을 코딩하는 것은 불행한 일입니다. 결과적으로 페더레이션 된 SQL Azure 인스턴스가 더 매력적입니다. –

+3

병렬 검색을 수행 할 때 가능한 모든 파티션 키를 질의 할 필요가 없습니다. "작음"과 "보다 큼"의 조합을 사용하여 동일한 스레드 내에서 여러 PartitionKey 인스턴스를 검색 할 수 있습니다. –

+0

@HerveRoggero 한 번에 여러 번 누르더라도 해당 쿼리에 가능한 모든 PartitionKeys를 포함시켜야합니다. – Jaxidian

1

Gaurav가 말했듯이 자동이 아닙니다. 하지만 그것이 불가능하다는 것을 의미하지는 않습니다.

PartitionKey에서 특정 가정을 할 수 있으면 Azure 테이블을 병렬로 실행할 수 있습니다. 예를 들어 PartitionKey가 GUID 인 경우 범위의 데이터를 검색하여 10 개의 스레드를 시작할 수 있습니다. 다음은 첫 번째 스레드에서 사용할 범위의 예입니다. [a, e [. 원하는 경우이 값을 조정하고 20 개의 스레드를 실행할 수 있습니다.

(에 PartitionKey GE의 'A'와에 PartitionKey LT 'E') 만약 대신이 아닌 고유 한 값을 사용하는 GUID를

, 당신은 당신이 단순히 많은 스레드를 시작하는 것,의는 국가의 목록을 가정 해 봅시다 국가.

정말 Azure 테이블 전체를 스캔해야하는 유일한 경우는 PartitionKey가 모든 엔티티에서 동일 할 때입니다.이 경우 설계 문제가있을 수 있습니다.

0

몇 달 후, 전체 테이블 스캔 병렬 처리의 성능 영향을 논의하기위한 답을 게시하고 싶습니다.

Guid 행 키 시드 값이 주어지면 우수한 분배를 갖는 키 생성 알고리즘을 사용하는 128 파티션 구성표를 사용했습니다.

경험적 테스트에 따르면 단일 스레드 쿼리는 일부 상황에서는 훨씬 성능이 뛰어날 수 있습니다. Azure가 어떻게 파트를 배포했는지, 테이블 크기와 차이가 나는 것 같습니다.

요약하면 다른 전략으로 성능이 향상되는지 확인하기 위해 제품 수명 기간 동안 확인해야하는 영역입니다.

그래서 내가 수행 한 작업은 테이블에 대한 자동화 된 테스트에서 예상 지속 시간을 배치하여 성능 저하가 다시 확인하기 위해 빨간색 표시등을 깜박일 수있게합니다.

관련 문제