Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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:
- 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.
- 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.
- 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:
- Felületek:
- Számbavételek:
Kapcsolódó témakörök