다음을 통해 공유


Windows 7의 인덱싱 우선 순위 지정 및 행 집합 이벤트

이 항목에서는 Windows 7에 대한 인덱싱 우선 순위 지정 및 행 집합 이벤트의 도입에 대해 간략하게 설명합니다.

이 항목은 다음과 같이 구성됩니다.

인덱싱 우선 순위 지정 및 행 집합 이벤트

Windows 7 이상에서는 특정 쿼리의 컨텍스트 내에서 우선 순위 스택이 있으며, 클라이언트는 해당 쿼리에 사용된 범위가 일반 항목보다 우선 순위가 지정되도록 요청할 수 있습니다.

이 우선 순위 지정 스택에는 다음과 같은 특성이 있습니다.

  • 스택의 항목은 포그라운드, 높음 또는 낮은 우선 순위를 가질 수 있습니다.
    • 포그라운드: 백오프 논리를 건너뛰고 인덱싱은 컴퓨터에서 허용하는 한 빨리 진행됩니다.
    • 높음: 백오프를 통해 우선 순위 지정이 요청되었습니다.
    • 낮음: 우선 순위 지정이 요청되었습니다. 스택의 다른 범위를 희생하지 않고 우선 순위가 지정되지 않은 인덱싱보다 높습니다.
  • 높음 또는 포그라운드 우선 순위에 대한 모든 요청은 요청 쿼리를 스택의 맨 위로 자동으로 충돌합니다.
  • 스택 맨 위에 있는 항목만 포그라운드 우선 순위를 가질 수 있습니다.
  • 우선 순위가 낮은 포그라운드 우선 순위가 있는 쿼리는 포그라운드 우선 순위가 손실되었으며 백오프를 통해 높은 우선 순위가 되었음을 알리는 이벤트를 받습니다.

우선 순위 스택은 다음과 같이 인덱서에서 처리되는 항목의 전체 우선 순위를 설정합니다.

  • 우선 순위가 높은 알림에는 백오프가 없으며 일반적으로 적은 수의 항목에 대해서만 전송됩니다. 예를 들어 Windows Explorer 작은 복사 엔진 작업에 이 우선 순위를 사용합니다.

  • 우선 순위 스택은 스택의 맨 위에 있고 백오프가 있으며 마지막으로 요청된 우선 순위 쿼리입니다.

  • 스택의 두 번째 쿼리입니다.

  • 스택의 세 번째 쿼리입니다.

  • 스택의 네 번째 쿼리 등입니다.

  • 일반 우선 순위 항목입니다.

  • 지운.

    참고

    각 그룹 내의 항목은 이전 항목별 의미 체계를 통해 내부적으로 우선 순위가 지정됩니다.

     

IRowsetPriorization 예제

우선 순위 지정 작업에 대한 기본 API는 반환된 행 집합을 쿼리하여 호출할 수 있는 다음 인터페이스를 통해 사용할 수 있습니다.

typedef [v1_enum] enum
{
    PRIORITY_LEVEL_FOREGROUND           = 0,    // process items in the scope first as quickly as possible
    PRIORITY_LEVEL_HIGH                 = 1,    // process items in the scope first at the normal rate
    PRIORITY_LEVEL_LOW                  = 2,    // process items in this scope before those at the normal rate, but after any other prioritization requests
    PRIORITY_LEVEL_DEFAULT              = 3     // process items at the normal indexer rate
} PRIORITY_LEVEL;


[
    object,
    uuid(IRowsetPrioritization_GUID),
    pointer_default(unique)
]
interface IRowsetPrioritization : IUnknown
{
    // Sets or retrieves the current indexer prioritization level for the scope specified by
    // this query.

    HRESULT SetScopePriority( [in] PRIORITY_LEVEL priority, [in] DWORD scopeStatisticsEventFrequency );
    HRESULT GetScopePriority( [out] PRIORITY_LEVEL * priority, [out] DWORD * scopeStatisticsEventFrequency );

    // Gets information describing the scope specified by this query:
    // indexedDocumentCount     -   The total number of documents currently indexed in the scope
    // oustandingAddCount       -   The total number of documents yet to be indexed in the scope (those not yet included in indexedDocumentCount)
    // oustandingModifyCount    -   The total number of documents indexed in the scope that need to be re-indexed (included in indexedDocumentCount)
    
    HRESULT GetScopeStatistics( [out] DWORD * indexedDocumentCount, [out] DWORD * oustandingAddCount, [out] DWORD * oustandingModifyCount );
};

행 집합 우선 순위 지정은 다음과 같이 작동합니다.

  1. IRowsetPrioritization 은 인덱서 행 집합에서 IUnknown::QueryInterface 메서드 를 사용하여 획득됩니다. 집합 우선 순위를 사용하려면 쿼리를 실행하기 전에 OLE DB ICommandProperties::SetProperties 메서드를 사용하여 DBPROP_ENABLEROWSETEVENTS TRUE로 설정해야 합니다.
  2. IRowsetPrioritization::SetScopePriority는 쿼리에 속하는 범위에 대한 우선 순위를 설정하고 쿼리 범위 내에서 인덱싱할 미해결 문서가 있을 때 scope 통계 이벤트가 발생하는 간격을 설정합니다. 이 이벤트는 우선 순위 수준이 기본값으로 설정된 경우 발생합니다.
  3. IRowsetPrioritization::GetScopeStatistics를 사용하여 scope 인덱싱된 항목 수, scope 추가할 미해결 문서 수 및 이 scope 내에서 다시 인덱싱해야 하는 문서 수를 가져올 수 있습니다.

IRowsetPrioritization 이벤트

IRowsetEvents::OnRowsetEvent에는 ROWSETEVENT_TYPE 열거형에 세 개의 행 집합 이벤트가 있습니다.

    // This method allows for future notifications of various actions about your rowset or items within
    // eventType:                               - An identifier of the particular event being sent
    // pVarEventData:                           - The expected value of the EventData for each event type
    //      ROWSETEVENT_TYPE_DATAEXPIRED        - VT_EMPTY
    //      ROWSETEVENT_TYPE_FOREGROUNDLOST     - VT_EMPTY
    //      ROWSETEVENT_TYPE_SCOPESTATISTICS    - VT_VECTOR | VT_UI4 - 3 elements (0 = indexed items, 1 = outstanding adds, 2 = oustanding modifies)

    HRESULT OnRowsetEvent( [in] ROWSETEVENT_TYPE eventType, [in] REFPROPVARIANT eventData );

행 집합 이벤트는 다음과 같습니다.

  • ROWSETEVENT_TYPE_DATAEXPIRED 이벤트는 행 집합을 지원하는 데이터가 만료되었으며 새 행 집합을 요청해야 했음을 나타냅니다.
  • ROWSET_TYPE_FOREGROUNDLOST 이벤트는 다른 사람이 이 쿼리보다 먼저 우선 순위를 지정했기 때문에 우선 순위 지정 스택에서 포그라운드 우선 순위를 가진 항목이 강등되었음을 나타냅니다.
  • ROWSETEVENT_TYPE_SCOPESTATISTICS 이벤트는 다음과 같이 IRowsetPrioritization::GetScopeStatistics 메서드 호출에서 사용할 수 있는 것과 동일한 정보를 제공하지만 푸시 메커니즘을 통해 사용할 수 있습니다.
    • 이 이벤트는 우선 순위 지정 API를 사용하여 기본이 아닌 우선 순위 지정 수준과 0이 아닌 통계 이벤트 빈도를 요청하는 경우에 발생합니다.
    • 이벤트는 통계가 실제로 변경되고 IRowsetPrioritization 에 지정된 간격이 경과한 경우에만 발생합니다(간격은 이벤트의 빈도를 보장하지 않음).
    • 이 이벤트는 0이 아닌 이벤트가 발생한 경우 "바운스 0" 상태(추가할 항목 0개, 남은 수정 0개)를 발생하도록 보장됩니다.
    • 통계 이벤트 빈도 전에 큐가 비워지면 인덱서는 이 이벤트를 보내지 않고 항목을 처리할 수 있습니다.

추가 리소스

우선 순위 지정 및 행 집합과 관련된 다음 리소스를 참조하세요.

Windows 7 검색

Windows 7 검색의 새로운 기능

Windows 7의 Windows 셸 라이브러리