2016-09-06 1 views
1

입니다. 따라서 응용 프로그램에서 쿼리가 발생하고로드가 계속 증가하는 쿼리가 있음을 깨달았습니다. 특히 클라이언트 가입을 늘리는 것은 자주 발생합니다 (오전 8시와 오후 5 시가 아닌 경우도 있음).RavenDb에서 정적 세션은 일반 세션에서 기회 주의적으로 사용됩니다. 쿼리 <TDocType>은

나는 문서 유형

public class AggregateSubscription 
{ 
    public Guid UserId {get; set;} 
    public Guid AggregateId {get; set;} 
    ...other fields 
} 

을하고 난 나는 내가 할 수있는

var results = session.Query<AggregateSubscription, AggregateSubscription_ByAggregateId>() 
    .Where(x => x.AggregateId == ...); 

내 질문을 알고이 인덱스를 사용하여 쿼리, 이제 인덱스

public class AggregateSubscription_ByAggregateId : AbstractIndexCreationTask<AggregateSubscription> 
{ 
    public AggregateSubscription_ByAggregateId() 
    { 
     Map = docs => from d in docs select new { d.AggregateId }; 
    } 
} 

를 추가했습니다 은 <AggregateSubscription>의 일반 쿼리와 함께 Where 절을 사용합니다. e AggregateId 속성은 자동으로이 정적 인덱스를 사용합니까? 예 :
var results = session.Query<AggregateSubscription>() 
    .Where(x => x.AggregateId == ...); //will this detect that it can use _ByAggregateId index and use it? 

인덱스를 추가 한 후, 나는 것 정말 ravendb의 쿼리 엔진, 슬라이스 및 루씬 구문에 필드, 그것은 일치하는 정적 인덱스가있다 감지하고 활용하는 것이 어디를 다이 싱 할 때 경우처럼. 설명서에서 동적 인덱스가 이와 같은 방식으로 작동하는 것처럼 보입니다. 동일한 모양의 쿼리가 동일한 동적 인덱스로 해석됩니다. 그러나 위에서 설명한 정적 인덱스가있는 시나리오에 대한 지원이 있는지는 알 수 없습니다.

나는 ravendb의 쿼리 구현이나 전략에 익숙한 누군가가 정적 인덱스를 얼마나 기대하는지 알려주고 싶습니다.

또는 색인 사용량 개를 볼 수있는 지점을 가리킬 수 있다면 경험적으로 결과를 확인할 수 있습니다. 내가보기에 인덱스가 실제로 쿼리에서 사용되는 인덱스가 아니라 인덱스에 대한 통계를 처리하는 것입니다.

편집 1 : 질문의 주위에 추가 컨텍스트

편집 2 : 좀 유망 증거를 발견했습니다. 쿼리 IRavenQueryable<T>을 만들 때 query.IndexQueried = "dynamic/AggregateSubscriptions"을 표시합니다. 그러나 그것은 클라이언트 측입니다.

쿼리를 실행 한 후 통계에 RavenQueryStatistics.IndexName = AggregateSubscription/ByAggregateId이 표시됩니다. ravendb 서버 측에서 실제로 정적 인덱스를 사용하는 것처럼 보입니다. 누구나 내 원래 질문에 답변 할 수 있다면 열려 있습니다. (ravendb 구현 세부 정보, 전체 전략 또는 Raven Studio와 같은 것을 통해 인덱스 쿼리 사용 통계)

답변

1

경험적으로 ' 클라이언트 측에서는 인덱스 이름이 동적 쿼리를 사용하고 있음을 보여 주었지만 쿼리 후 서버가 반환 한 RavenQueryStatistics은 궁극적으로 일치 항목을 발견하고 정적 인덱스를 사용함을 보여줍니다.

또한, GitHub의에 ravendb의 소스로 파고, 나는이 전략이 구현된다 찾을 수 있었다 :
방법 public DynamicQueryOptimizerResult SelectAppropriateIndex(...

https://github.com/ravendb/ravendb/blob/v3.0/Raven.Database/Queries/DynamicQueryOptimizer.cs#L50

가능성 인덱스 경기 예선 때 그것은 꽤 털이 얻는다 (행 91-336).하지만 설정 (라인 64-75)을 살펴보면 인덱스 일치를 찾는 기본 한정자는 쿼리에서 사용하는 정규화 된 필드 집합입니다.

관련 문제