Rangsorolási és sorhalmazesemények indexelése a Windows 7-ben

Ez a témakör a Windows 7 indexelési rangsorolásának és sorhalmazeseményeinek bevezetését ismerteti.

Ez a témakör a következőképpen van rendszerezve:

Rangsorolás és sorhalmaz eseményeinek indexelése

Windows 7 és újabb verziókban létezik egy prioritási verem, amelyben a kliens kérheti, hogy a lekérdezésben használt hatókörök nagyobb prioritást élvezzenek a normál elemeknél.

Ez a prioritási sorrend a következő jellemzőkkel rendelkezik:

  • A verem elemei elsőbbségi, magas vagy alacsony prioritással is rendelkezhetnek:
    • Előtérben: A rendszer kihagyja a visszautasítási logikát, és az indexelés a gép által megengedett legnagyobb sebességgel halad.
    • Magas: A rangsorolást halasztással kérték.
    • Alacsony: A rangsorolást kérték, nem a verem többi hatóköre rovására, hanem a nem rangsorolt indexelés elé.
  • A magas vagy elsődleges prioritású kérések automatikusan a verem tetejére kerülnek.
  • Csak a verem tetején lévő elem rendelkezhet kiemelt prioritással.
  • A lekérdezések, amelyek előtér-prioritásukból visszasorolódnak, egy eseményértesítést kapnak arról, hogy elvesztették az előtér-prioritást és visszalépéssel magas prioritássá váltak.

A prioritási verem az indexelőben feldolgozott elemek általános prioritását az alábbiak szerint állítja be:

  • A magas prioritású értesítések nem rendelkeznek visszalépéssel, és általában csak kis számú elemhez küldik őket. A Windows Intéző például ezt a prioritást alkalmazza a kisebb másolási műveleteknél.

  • A Priority Stack a verem tetején van, van visszavonulási mechanizmusa, és ez az utolsó kért prioritási lekérdezés.

  • Második lekérdezés a veremben.

  • Harmadik lekérdezés a veremben.

  • Negyedik lekérdezés a veremben, és így tovább.

  • Normál prioritású elemek.

  • Törölt elemek.

    Jegyzet

    Az egyes csoportokban lévő elemeket belsőleg rangsorolja a régebbi elemenkénti szemantikán keresztül.

     

IRowsetPriorization-példák

A rangsorolási munka elsődleges API-ja a következő felületen érhető el, amelyet a visszaadott sorkészlet lekérdezésével hívhat meg:

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

A sorok rangsorolása a következőképpen működik:

  1. IRowsetPrioritizationIUnknown::QueryInterface metódussal egy indexelősorkészleten. DBPROP_ENABLEROWSETEVENTS értékét TRUE-re kell állítani az OLE DB ICommandProperties::SetProperties metódussal a lekérdezés végrehajtása előtt, hogy használni lehessen a sorhalmaz-rangsorolást.
  2. IRowsetPrioritization::SetScopePriority beállítja a lekérdezéshez tartozó hatókörök rangsorolását, valamint azt az intervallumot, amikor a hatókörstatisztikák eseménye felmerül, ha a lekérdezés hatókörei között még indexelendő dokumentumok vannak. Ez az esemény akkor jelenik meg, ha a prioritási szint alapértelmezett értékre van állítva.
  3. IRowsetPrioritization::GetScopeStatistics segítségével lekérheti a hatókörben lévő indexelt elemek számát, a hatókörben hozzáadandó fennmaradó dokumentumok számát és a hatókörben újra indexelendő dokumentumok számát.

IRowsetPrioritization események

Az IRowsetEvents::OnRowsetEventROWSETEVENT_TYPE enumerálásban három sorhalmazesemény található:

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

A sorhalmaz eseményei a következők:

  • Egy ROWSETEVENT_TYPE_DATAEXPIRED esemény azt jelzi, hogy a sorkészlethez tartozó adatok érvénytelenedtek, és új sorkészletet kell kérni.
  • A ROWSET_TYPE_FOREGROUNDLOST esemény azt jelzi, hogy egy olyan elem, amely korábban előtér-prioritással rendelkezett a prioritási veremben, lefokozódott, mert valaki más előre helyezte magát a lekérdezéssel szemben.
  • Az ROWSETEVENT_TYPE_SCOPESTATISTICS esemény ugyanazokat az információkat szolgáltatja, amelyek elérhetők az IRowsetPrioritization::GetScopeStatistics metódushívás révén, de egy továbbítási mechanizmuson keresztül, az alábbiak szerint:
    • Az esemény akkor jön létre, ha a rangsorolási API-t nem alapértelmezett rangsorolási szint, valamint nem nulla statisztikai esemény gyakoriságának igénylésére használták.
    • Az esemény csak akkor fordul elő, ha a statisztikák ténylegesen megváltoznak, és az IRowsetPrioritizationmegadott időköz eltelt (az intervallum nem garantálja az esemény gyakoriságát).
    • Ez az esemény garantáltan "visszapattanó nulla" állapotot hoz létre (nincs több hozzáadandó elem, nincs több módosítandó elem), feltéve, hogy már kiemeltek egy nem nulla eseményt.
    • Az indexelő az esemény elküldése nélkül is feldolgozhatja az elemeket, ha az üzenetsor a statisztikai esemény gyakorisága előtt üres.

További erőforrások

Tekintse meg a rangsorolással és sorkészletekkel kapcsolatos alábbi erőforrásokat:

Windows 7 Keresés

Windows 7 Search új

Windows Shell-kódtárak a Windows 7-ben