2014-10-12 5 views
1

Azure 테이블과 NOSQL이 처음입니다.Azure 테이블 쿼리

현재 약 60,000 개의 행이있는 Azure 테이블에 테이블이 있습니다. 여기에는 ID (RowKey), 고용주 (PartitionKey), 제목, 지역, 카테고리 및 기타 컬럼과 같은 컬럼이있는 구인 정보가 들어 있습니다.

웹 사이트의 누군가가 검색을 수행하면 요청이 외부 일치 시스템으로 전송됩니다. 일치하는 시스템은 적용 가능한 작업을 리턴합니다. 일치하는 엔진은 각 작업에 대해 ID와 고용주를 반환합니다.

검색에는 300 개의 직업을 다루는 10 개의 고용주가있을 수 있습니다. SQL Server 데이터베이스를 사용하고 있다면 단순히 내 테이블에서 해당 작업을 선택하기 위해 기본 키가 될 ID에 "IN"절을 생성합니다.

Azure Table을 사용하는 것이 좋습니다 (필자는 Employer를 작성한 PartitionKey를 사용하여 테이블에 각 고용주에 대한 쿼리를 발행 한 다음 결과를 결합한 다음 통과하기 전에 정렬하는 것이 좋습니다). UI에. 여기

내 문제는 내가 예 : "WHERE 고용주 ="MyEmployer "AND ID IN (1,2,3,4,5,6)와 같은 쿼리를 실행할 수 있다는 것입니다.

하는 것이 무엇 이를 달성하는 가장 좋은 방법은 무엇입니까? 나는 고용주가 모든 것을 사용하지 않고 다시 돌아 오는 것을 원하지 않습니다. 특정 고용주의 특정 직무를 ID를 기반으로하고 싶습니다.

생각은 간단해야하지만 까다로운 증명이 필요합니다.

답변

3

여기 내 문제는 "Where Employer = "MyEmployer"및 ID IN (1,2,3,4,5,6).

문법이 다소 다를지라도 IN 쿼리를 수행 할 수 있습니다. 당신이 고려해야 할 필요가

(PartitionKey eq 'MyEmployer' and (RowKey eq '1' or RowKey eq '2' or RowKey eq '3' or RowKey eq '4' or RowKey eq '5' or RowKey eq '6') 

몇 가지 :

  • 이 전체 파티션 스캔됩니다 이렇게하면 REST API를 사용하여 하나로, OData 구문을 사용하여 쿼리를 작성하는 가정 사용하는 것입니다. 파티션의 엔티티 수가 적지 만 엔티티 수가 늘어남에 따라 문제가 될 수있는 경우 문제가되지 않을 수 있습니다.
  • 쿼리가 테이블 서비스 요청의 쿼리 문자열로 전달되므로 쿼리에 사용할 수있는 제한 수가 or 개입니다. 내가 잘못 생각하지 않는다면 쿼리 문자열의 최대 길이는 1024 자입니다.
  • 각 쿼리가 개별 개체를 타겟팅하는 여러 개의 단일 쿼리를 동시에 실행하는 것이 좋습니다. PartitionKey eq 'MyEmployer' and RowKey eq '1'.

마지막으로 저장소 팀의 블로그 게시물 http://blogs.msdn.com/b/windowsazurestorage/archive/2010/11/06/how-to-get-most-out-of-windows-azure-tables.aspx을 읽을 수 있습니다. 이것은 매우 좋은 통찰력을 제공 할 것입니다.

+0

감사합니다. 매우 도움이됩니다. Linq를 사용하여이를 달성하는 방법을 알고 있습니까? 나는 값 배열에 Any를 더한 contains를 사용하려고 시도했지만 모두 지원되지 않는다. – Paul

+0

이 코드를 시도하지 않았지만이 코드가 작동하는지 확인할 수 있습니다.'(x => x.PartitionKey == "MyEmployer"&& (x.RowKey == "1"|| x.RowKey == "2"| | x.RowKey == "3"|| x.RowKey == "4"|| x.RowKey == "5"|| x.RowKey == "6"));' –