2012-05-22 3 views
2

하나의 파티션에서 행 키 모음으로 여러 엔터티를 조회해야합니다. 그것을 수행하기위한 적절한 질의는 무엇입니까?행 키 모음으로 azure 테이블 쿼리

+1

작업 병렬 라이브러리를 사용하고 개별적으로 쿼리하는 것이 좋습니다. –

답변

2

(원래 질문을 암시하고있는) rowkey에 의한 쿼리와 관련된 문제 : 모든 행에 해당 행키가 존재할 수 있으므로 테이블 스캔이 끝납니다. 그리고 이러한 쿼리를 개별적으로 실행하면 각각에 대해 테이블 ​​검색을 수행하게됩니다. (원래의 질문에 대한 주석에서 @GlennFerrieLive가 제안한 것처럼 작업 병렬 라이브러리에서도 마찬가지입니다.)

$filter (this article에서 설명) 또는 열 키의 개별 목록 (필터 내에서 개별 비교 15 개로 제한)으로 범위 키를 지정할 수 있습니다. 이것은 단 하나의 테이블 스캔으로 끝나야하지만 여전히 테이블 스캔입니다.

쿼리에 파티션 키를 지정할 수있는 경우 쿼리를 훨씬 빨리 반환 할 수 있으므로 그렇게해야합니다. 좋아, 훨씬 더 빠른은 내가 저장하는 데이터의 양을 모르기 때문에 상대적입니다.

EDIT : 의견을 통한 업데이트, partitionkey를 알고 있으므로 위의 지침에 따라 단일 필터 내에서 행키 범위 나 개별적인 행 키를 지정할 수 있습니다. 또는 ... 더 많은 행 키가있는 경우 TPL (테이블 스캔이 없으므로 이제는 의미가 있음)을 통해 이들을 실행하는 것을 고려할 수 있습니다. 필터 당 단일 행 키 또는 범위 또는 필터링 된 목록으로 그룹화합니다.

+0

파티션 키를 알고 있습니다. 하나의 파티션에서 여러 행 키로 쿼리해야합니다. –

+0

여러 행 키에 대한 OR 쿼리로 인해 파티션 검색이 발생한다는 점에 유의하십시오 (해당 답변에서 breischi가 지적한 바와 같이). 파티션의 크기에 따라 이것은 매우 나쁠 수 있습니다. – smarx

5

최적화 대상에 따라 다릅니다. 여러 개의 행 키를 지정하는 것이 동일한 파티션에 있더라도 파티션 검색을하게됩니다. 쿼리 최적화 프로그램은 OR 쿼리를 처리하기에 충분하지 않습니다. 파티션 스캔은 파티션의 크기에 따라 수십에서 수백 밀리 초가 걸릴 수 있습니다. 항상 포인트 쿼리보다 느립니다.

속도를 최적화하려면 각 쿼리를 별도로 수행해야합니다. 작업 병렬 라이브러리를 사용하지 말고 시작/끝 기능을 사용하면 훨씬 더 확장됩니다.

대기 시간이 중요하지 않은 경우 OR 쿼리를 수행하십시오. 더 느려지지만, 하나의 거래로 계산되므로 더 쌉니다.

+0

안녕하세요, 시작/종료 기능은 무엇입니까? 2016 년에도 관련성이 있습니까? – mayu

+0

Begin/End 함수는 이름이'begin'과'end'로 시작합니다. :). 그들은 이전 스타일의 비동기 호출입니다. 라이브러리를 잠시 사용하지 않았기 때문에 아직 관련성이 있는지 모르겠다. Async 스타일의 Task 반환 함수로 대체 될 수있다. 또한 쿼리 최적화 프로그램은 지난 5 년 동안 더 나아질 수 있습니다. –

관련 문제