Condividi tramite


Scrittura di record di dati in un flusso CLFS

Esistono due tipi di record in un flusso CLFS (Common Log File System): record di dati e record di riavvio. Questo argomento illustra come scrivere record di dati in un flusso. Per informazioni su come scrivere record di riavvio, vedere Scrittura di record di riavvio in un flusso CLFS.

Prima di poter scrivere record di dati in un flusso CLFS, è necessario creare un'area di marshalling chiamando ClfsCreateMarshallingArea. È quindi possibile aggiungere record all'area di marshalling (che è in memoria volatile) e CLFS scarica periodicamente i record nell'archiviazione stabile.

Esistono diverse varianti per la scrittura di record di dati in un flusso. Ad esempio, è possibile riservare spazio in anticipo e quindi scrivere diversi record oppure è possibile scrivere record senza riservare spazio. È possibile richiedere che i record scritti nell'area di marshalling vengano immediatamente accodati all'archiviazione stabile oppure è possibile consentire a CLFS di accodare i record in base ai relativi criteri.

Per tutte le varianti sulla scrittura di record di dati, completare la procedura seguente.

  1. Creare una matrice di una o più strutture CLFS_WRITE_ENTRY . Ogni struttura di immissione di scrittura punta a un buffer che è stato riempito con i dati dei record.

  2. Chiamare ClfsReserveAndAppendLog o ClfsReserveAndAppendLogAligned.

Le tabelle nelle sottosezioni seguenti mostrano come impostare i parametri di ClfsReserveAndAppendLog per diverse varianti per la scrittura di un record in un flusso.

Scrittura di un singolo buffer di dati in un flusso

Si supponga di avere un singolo buffer di dati che si vuole scrivere in un'area di marshalling. Si è disposti a lasciare che il record venga scaricato nell'archiviazione stabile in base ai criteri CLFS e non si vuole che il record faccia parte di una catena di record. Nella tabella seguente viene illustrato come impostare i parametri quando si chiama ClfsReserveAndAppendLog.

Nome parametro valore

pvMarshalContext

Puntatore a un'area di marshalling.

rgWriteEntries

Puntatore a una struttura CLFS_WRITE_ENTRY .

cWriteEntries

1

plsnUndoNext

CLFS_LSN_INVALID

plsnPrevious

CLFS_LSN_INVALID

cReserveRecords

0

rgcbReservation

NULL

fFlags

0

plsn

Puntatore a una struttura CLFS_LSN . Si tratta di un parametro di output che riceve l'LSN del record scritto.

Riservare spazio per un set di record di log CLFS

È possibile usare ClfsReserveAndAppendLog per riservare spazio in un'area di marshalling per un set di record di log senza scrivere effettivamente alcun record. Nella tabella seguente viene illustrato come impostare i parametri per riservare spazio record.

Nome parametro valore

pvMarshalContext

Puntatore a un'area di marshalling.

rgWriteEntries

NULL

cWriteEntries

0

plsnUndoNext

CLFS_LSN_INVALID

plsnPrevious

CLFS_LSN_INVALID

cReserveRecords

Numero di elementi nella matrice a cui punta rgcbReservation.

rgcbReservation

Puntatore a una matrice di variabili tipizzata LONGLONG. Ogni elemento nella matrice è la dimensione, in byte, di un record per cui verrà riservato lo spazio. Si noti che si tratta di questa dimensione della parte dei dati del record; non è necessario includere le dimensioni delle intestazioni o del riempimento.

fFlags

0

plsn

NULL

Nota Un altro modo per riservare lo spazio in un'area di marshalling consiste nel chiamare ClfsAlignReservedLog seguito da ClfsAllocReservedLog.

Scrittura di un record in spazio riservato

Si supponga di avere già spazio riservato per tre record le cui dimensioni, in byte, sono 100, 200 e 300. L'area di marshalling include un numero di record riservato pari a 3 e uno spazio riservato sufficiente per contenere i 600 byte dei dati dei record, le intestazioni dei record e qualsiasi spaziatura interna necessaria per l'allineamento.

Si supponga ora di voler scrivere uno di questi record nello spazio riservato nell'area di marshalling. Lo spazio riservato disponibile verrà ridotto e il conteggio dei record riservati verrà decretato da 3 a 2. Nella tabella seguente viene illustrato come impostare i parametri quando si chiama ClfsReserveAndAppendLog.

Nome parametro valore

pvMarshalContext

Puntatore a un'area di marshalling.

rgWriteEntries

Puntatore a una matrice di strutture CLFS_WRITE_ENTRY .

cWriteEntries

Numero di elementi nella matrice puntati da rgWriteEntries.

plsnUndoNext

CLFS_LSN_INVALID o LSN del record precedente nella catena di annullamento. Per altre informazioni sulla catena di annullamento, vedere Numeri di sequenza log CLFS.

plsnPrevious

CLFS_LSN_INVALID o LSN del record di log precedente nella catena LSN precedente. Per altre informazioni sulla catena LSN precedente, vedere Numeri di sequenza di log CLFS.

cReserveRecords

0

rgcbReservation

NULL

fFlags

CLFS_FLAG_USE_RESERVATION

plsn

Puntatore a una struttura CLFS_LSN . Si tratta di un parametro di output che riceve l'LSN del record scritto.

Scrittura di record con voci allineate

Si supponga di voler scrivere un record con tre voci di scrittura. Le voci di scrittura variano in base a dimensioni comprese tra 300 e 500 byte, ma è necessario che ogni voce di scrittura inizi su un limite di 512 byte. Nella tabella seguente viene illustrato come impostare i parametri della funzione ClfsReserveAndAppendLogAligned .

Nome parametro valore

pvMarshalContext

Puntatore a un'area di marshalling.

rgWriteEntries

Puntatore a una matrice di tre strutture CLFS_WRITE_ENTRY.

cWriteEntries

3

cbEntryAlignment

512

plsnUndoNext

CLFS_LSN_INVALID o LSN del record precedente nella catena di annullamento. Per altre informazioni sulla catena di annullamento, vedere Numeri di sequenza di log CLFS.

plsnPrevious

CLFS_LSN_INVALID o LSN del record di log precedente nella catena LSN precedente. Per altre informazioni sulla catena LSN precedente, vedere Numeri di sequenza di log CLFS.

cReserveRecords

0

rgcbReservation

NULL

fFlags

Zero o una combinazione di flag che specificano le preferenze di scaricamento e prenotazione.

plsn

Puntatore a una struttura CLFS_LSN. Si tratta di un parametro di output che riceve l'LSN del record scritto.

Le tabelle precedenti mostrano solo alcune delle numerose varianti relative alla prenotazione dello spazio dei record e alla scrittura di record nei flussi CLFS. Come si pensa ad altre varianti, tenere presente quanto segue: le azioni eseguite da ClfsReserveAndAppendLog (o ClfsReserveAndAppendLogAligned) sono atomiche. Ad esempio, è possibile effettuare una singola chiamata a ClfsReserveAndAppendLog che riserva spazio per un record e scrive il record nel flusso. La coppia di azioni (riserva, scrittura) avrà esito positivo nel suo complesso o avrà esito negativo nel suo complesso.