Partager via


Indexation des événements de hiérarchisation et d’ensemble de lignes dans Windows 7

Cette rubrique décrit l’introduction des événements de hiérarchisation et d’ensemble de lignes d’indexation pour Windows 7.

Cette rubrique est organisée comme suit :

Indexation des priorités et événements d’ensemble de lignes

Dans Windows 7 et versions ultérieures, il existe une pile de priorités dans laquelle le contexte d’une requête particulière, le client peut demander que les étendues utilisées dans cette requête soient hiérarchisées au-dessus de celle des éléments normaux.

Cette pile de hiérarchisation présente les caractéristiques suivantes :

  • Les éléments de la pile peuvent avoir une priorité au premier plan, une priorité élevée ou une priorité faible :
    • Au premier plan : la logique de backoff est ignorée et l’indexation s’effectue aussi rapidement que la machine le permet.
    • Élevé : la hiérarchisation a été demandée avec un backoff.
    • Faible : la hiérarchisation a été demandée, non pas au détriment d’autres étendues sur la pile, mais au-dessus de l’indexation non hiérarchisée.
  • Toute demande de priorité élevée ou de premier plan place automatiquement la requête en haut de la pile.
  • Seul l’élément situé en haut de la pile peut avoir la priorité au premier plan.
  • Une requête avec une priorité de premier plan qui est basculée en priorité reçoit un événement l’informant qu’elle a perdu la priorité de premier plan et est devenue une priorité élevée avec un retour en arrière-plan.

La pile de priorités définit une priorité globale des éléments qui sont traités dans l’indexeur comme suit :

  • Les notifications à priorité élevée n’ont pas d’interruption et sont généralement envoyées uniquement pour un petit nombre d’éléments. Par exemple, Windows Explorer utilise cette priorité pour les opérations de petit moteur de copie.

  • Priority Stack est en haut de la pile, a un backoff et est la dernière requête de priorité demandée.

  • Deuxième requête dans la pile.

  • Troisième requête dans la pile.

  • Quatrième requête dans la pile, et ainsi de suite.

  • Éléments de priorité normaux.

  • Éléments supprimés.

    Notes

    Les éléments de chaque groupe sont hiérarchisés en interne via l’ancienne sémantique par élément.

     

Exemples IRowsetPriorization

L’API principale pour le travail de hiérarchisation est disponible via l’interface suivante, qui peut être appelée en interrogeant l’ensemble de lignes retourné :

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 );
};

La hiérarchisation de l’ensemble de lignes fonctionne comme suit :

  1. IRowsetPrioritization est acquis avec la méthode IUnknown::QueryInterface sur un ensemble de lignes d’indexeur. DBPROP_ENABLEROWSETEVENTS devez avoir la valeur TRUE avec la méthode OLE DB ICommandProperties::SetProperties avant d’exécuter la requête afin d’utiliser la hiérarchisation de l’ensemble de lignes.
  2. IRowsetPrioritization::SetScopePriority définit la priorité pour les étendues appartenant à la requête, et l’intervalle où l’événement de statistiques d’étendue est déclenché lorsqu’il y a des documents en suspens à indexer dans les étendues de requête. Cet événement est déclenché si le niveau de priorité est défini sur la valeur par défaut.
  3. IRowsetPrioritization::GetScopeStatistics peut être utilisé pour obtenir le nombre d’éléments indexés dans l’étendue, le nombre de documents en suspens à ajouter dans l’étendue et le nombre de documents qui doivent être réindexés dans cette étendue.

Événements IRowsetPrioritization

Il existe trois événements d’ensemble de lignes dans IRowsetEvents::OnRowsetEvent dans l’énumération 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 );

Les événements d’ensemble de lignes sont les suivants :

  • L’événement ROWSETEVENT_TYPE_DATAEXPIRED indique que les données de sauvegarde de l’ensemble de lignes ont expiré et qu’un nouvel ensemble de lignes doit être demandé.
  • L’événement ROWSET_TYPE_FOREGROUNDLOST indique qu’un élément qui avait une priorité de premier plan dans la pile de hiérarchisation a été rétrogradé, car quelqu’un d’autre s’est hiérarchisé avant cette requête.
  • L’événement ROWSETEVENT_TYPE_SCOPESTATISTICS vous fournit les mêmes informations que celles disponibles à partir de l’appel de méthode IRowsetPrioritization::GetScopeStatistics , mais via une mécanique push, comme suit :
    • L’événement se produit si l’API de hiérarchisation a été utilisée pour demander un niveau de priorité autre que celui par défaut et une fréquence d’événement de statistiques non nulle.
    • L’événement se produit uniquement lorsque les statistiques changent réellement et que l’intervalle spécifié dans IRowsetPrioritization est écoulé (l’intervalle ne garantit pas la fréquence de l’événement).
    • Cet événement est garanti pour générer un état « rebond zéro » (zéro élément restant à ajouter, zéro modification restant), à condition qu’un événement autre que zéro ait été déclenché.
    • L’indexeur peut traiter des éléments sans envoyer cet événement, si la file d’attente se vide avant la fréquence de l’événement des statistiques.

Ressources supplémentaires

Consultez les ressources suivantes relatives à la hiérarchisation et aux ensembles de lignes :

Recherche Windows 7

Nouveautés de La recherche Windows 7

Bibliothèques Windows Shell dans Windows 7