2013-10-30 2 views
0

누구나 동적 검색에 적합하도록 하늘색 테이블을 설계 한 경험이 있습니까?하늘색 테이블에서 동적 검색

public class LibraryDocument 
{ 
    public string DocumentNumber { get; set; } 
    public string Complaint { get; set; } 
    public string Respondent { get; set; } 
    public string DocumentDate { get; set; } 
    public string Division { get; set; } 
    public string DocumentType { get; set; } 
    public string Content { get; set; } 
    public string Footer { get; set; } 
    public string Title { get; set; } 
    public string[] FooterItems { get; set; } 
    public string[] RespondentList { get; set; } 
    public string[] ComplaintList { get; set; } 
} 

내가 푸른 테이블이 변환해야합니다
나는 도서관 클래스가 있습니다.

Input: 클라이언트
Process: 시스템은 모든 라이브러리 데이터
Output: 반환 Partitionkeys과 일치하는 데이터의 Rowkeys에

내가 더 생각할 수 없다을 키워드와 일치 할 수 있어야 API를 통해 키워드를 보내드립니다 필요한 테이블을 디자인하는 방법.
제안 사항이 있으십니까?

답변

2

Azure 저장소 테이블은 주로 행의 유일한 인덱스가 PartitionKey + RowKey의 조합이므로 이러한 사용을 지원하도록 설계되지 않았으므로 PK (최소한)와 RK에 의존하지 않는 쿼리는 매우 비효율적입니다 (서버는 기본적으로 모든 행을 구문 분석합니다!).

나는 Azure에 배포 할 수있는 검색 엔진 인 Lucene.NET을 살펴볼 것을 제안합니다. 일부 자원 :

2

나는 일반적으로 해당 테이블에 저장 동적 검색을위한 좋은 솔루션입니다 생각하지 않습니다. 나는이 논리를 구현하기 위해 Azure Directory https://azuredirectory.codeplex.com/ 또는 다른 검색 엔진을 사용하여 Lucene.NET을 사용하는 것이 좋습니다.

그러나 ATS에 검색 기능을 제공해야하는 경우 두 개의 테이블을 만드는 것이 좋습니다. LibraryDocuments 테이블에 모든 LibraryDocument 개체가 포함됩니다. PartitionKey/RowKey 조합은 고유하며 비즈니스 의미/핵심 정보를 각 문서에 제공합니다. LibraryDocument의 PartitionKey/RowKey 조합 조합의 각 가능한 키워드 및 RowKey에서 partitionKey를 생성 할 LibraryIndex 테이블을 만듭니다.이 테이블에서 해당 키워드를 찾을 수 있습니다. IE : Index 테이블은 LibraryDocuments에 인덱스를 제공합니다.

이렇게 검색하면 항상 PartitionKey가 조정되어 더 빠릅니다. 그러나이 검색은 파티션 키 일치가 여러 저장소 트랜잭션을 스팬하고 연속 토큰 (etags)을 요구할 수 있기 때문에 여전히 여러 요청을 수행 할 수 있습니다 또한 "포함"유형의 검색을 수행하는 데 문제가있을 수 있으며 일반적으로이 시스템을 기본 키워드 검색 또는 기껏해야 "시작 - 함께"검색.

HTH

관련 문제