2013-06-28 6 views
2

RowKey 및 PartitionKey 이외의 다른 데이터를 쿼리하면 전체 테이블 스캔이 발생합니다. 나는 전체 쿼리 프로세스를 제대로 이해하려고 노력하고 있지만, 전체 시련에 대해 조금 비어 있습니다.Azure 테이블 고급 쿼리

단일 스토리지에 수백만 행의 데이터 개체가 있습니다. PartitionKey를 사용하여 데이터의 하위 집합으로 나눕니다.

var query = new TableQuery<MyEntity>() 
    .Where(TableQuery.CombineFilters(
     TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, pPartition), 
     TableOperators.And, 
     TableQuery.GenerateFilterCondition("Timestamp", QueryComparisons.GreaterThanOrEqual, startTime)); 

이 쿼리는 테이블 끝 부분에 어떻게 구성되어 있습니까? 먼저 어떤 필터가 적용되는지 제어 할 수 있습니까? 적용하는 순서입니까?이 경우에는 먼저 100k 행의 하위 집합을 가져온 다음 Timestamp 필터를 적용합니다.

필자가 이것을 염두에두고있는 이유는 PartitionKey와 RowKey를 사용하여 분리를 위해 다른 데이터를 저장하려고하지만 가능한 한 효율적으로 날짜별로 쿼리 할 수 ​​있어야한다는 것입니다. 이 시스템은 이와 같이 많은 요청으로 상당히 많은 작업 부하를 가지므로시기 적절한 방식으로 작동하는 것이 중요합니다.

답변

1

모든 쿼리는 TableStorage에서 PatitionKey와 RowKey 필터를 적용한 다음 각 청크에 대해 추가 필터를 적용합니다. 다른 필드에 의한 쿼리 성능을 향상 시키려면 PartitionKey 또는 RowKey의 일부로 포함시켜야합니다. 이것이 유일한 방법입니다. PartitionKey 및 RowKey 속성에서 조인을 수행하고 TableStorage에서 조인을 수행하는 고급 기술을 찾을 수 있습니다.