Compartir a través de


Escribir registros de datos en una secuencia CLFS

Hay dos tipos de registros en un flujo del Sistema de archivos de registro común (CLFS): registros de datos y registros de reinicio. En este tema se explica cómo escribir registros de datos en una secuencia. Para obtener información sobre cómo escribir registros de reinicio, vea Escribir registros de reinicio en una secuencia CLFS.

Para poder escribir registros de datos en una secuencia CLFS, debe crear un área de serialización llamando a ClfsCreateMarshallingArea. A continuación, puede anexar registros al área de serialización (que está en memoria volátil) y CLFS vaciará periódicamente los registros en un almacenamiento estable.

Hay varias variaciones en la escritura de registros de datos en una secuencia. Por ejemplo, puede reservar espacio con antelación y, a continuación, escribir varios registros, o bien escribir registros sin reservar espacio. Puede solicitar que los registros que escriba en el área de serialización se pongan inmediatamente en cola en el almacenamiento estable, o puede permitir que CLFS ponga en cola los registros según su directiva.

Para todas las variaciones en la escritura de registros de datos, complete los pasos siguientes.

  1. Cree una matriz de una o varias estructuras de CLFS_WRITE_ENTRY . Cada estructura de entrada de escritura apunta a un búfer que ha rellenado con datos de registro.

  2. Llame a ClfsReserveAndAppendLog o ClfsReserveAndAppendLogAligned.

Las tablas de las subsecciones siguientes muestran cómo establecer los parámetros de ClfsReserveAndAppendLog para varias variaciones al escribir un registro en una secuencia.

Escritura de un único búfer de datos en una secuencia

Supongamos que tiene un único búfer de datos que desea escribir en un área de serialización. Está dispuesto a permitir que el registro se vacíe en un almacenamiento estable según la directiva CLFS y no desea que el registro forme parte de ninguna cadena de registros. En la tabla siguiente se muestra cómo establecer los parámetros al llamar a ClfsReserveAndAppendLog.

Nombre de parámetro Value

pvMarshalContext

Puntero a un área de serialización.

rgWriteEntries

Puntero a una estructura de CLFS_WRITE_ENTRY .

cWriteEntries

1

plsnUndoNext

CLFS_LSN_INVALID

plsnPrevious

CLFS_LSN_INVALID

cReserveRecords

0

rgcbReservation

NULL

fFlags

0

plsn

Puntero a una estructura de CLFS_LSN . (Se trata de un parámetro de salida que recibe el LSN del registro escrito).

Reserva de espacio para un conjunto de registros clFS

Puede usar ClfsReserveAndAppendLog para reservar espacio en un área de serialización de un conjunto de registros sin escribir realmente ninguno de los registros. En la tabla siguiente se muestra cómo establecer los parámetros para reservar espacio de registro.

Nombre de parámetro Value

pvMarshalContext

Puntero a un área de serialización.

rgWriteEntries

NULL

cWriteEntries

0

plsnUndoNext

CLFS_LSN_INVALID

plsnPrevious

CLFS_LSN_INVALID

cReserveRecords

Número de elementos de la matriz a los que apunta rgcbReservation.

rgcbReservation

Puntero a una matriz de variables con tipo LONGLONG. Cada elemento de la matriz es el tamaño, en bytes, de un registro para el que se reservará el espacio. Tenga en cuenta que este es este tamaño de la parte de datos del registro; no es necesario incluir el tamaño de los encabezados ni el relleno.

fFlags

0

plsn

NULL

Nota Otra manera de reservar espacio en un área de serialización es llamar a ClfsAlignReservedLog seguido de ClfsAllocReservedLog.

Escritura de un registro en un espacio reservado

Supongamos que ya tiene espacio reservado para tres registros cuyos tamaños, en bytes, son 100, 200 y 300. El área de serialización tiene un recuento de registros reservados de 3 y suficiente espacio reservado para contener los 600 bytes de datos de registro, los encabezados de registro y cualquier relleno necesario para la alineación.

Ahora supongamos que desea escribir uno de esos registros en el espacio reservado en el área de serialización. Se reducirá el espacio reservado disponible y se disminuirá el recuento de registros reservados de 3 a 2. En la tabla siguiente se muestra cómo establecer los parámetros al llamar a ClfsReserveAndAppendLog.

Nombre de parámetro Value

pvMarshalContext

Puntero a un área de serialización.

rgWriteEntries

Puntero a una matriz de estructuras de CLFS_WRITE_ENTRY .

cWriteEntries

Número de elementos de la matriz a los que apunta rgWriteEntries.

plsnUndoNext

CLFS_LSN_INVALID o el LSN del registro anterior en la cadena de deshacer. Para obtener más información sobre la cadena de deshacer, vea Números de secuencia de registro clFS.

plsnPrevious

CLFS_LSN_INVALID o el LSN del registro anterior en la cadena de LSN anterior. Para obtener más información sobre la cadena LSN anterior, consulte Números de secuencia de registro clFS.

cReserveRecords

0

rgcbReservation

NULL

fFlags

CLFS_FLAG_USE_RESERVATION

plsn

Puntero a una estructura de CLFS_LSN . (Se trata de un parámetro de salida que recibe el LSN del registro escrito).

Escritura de registros con entradas alineadas

Supongamos que desea escribir un registro que tenga tres entradas de escritura. Las entradas de escritura varían en tamaño entre 300 y 500 bytes, pero necesita que cada entrada de escritura comience en un límite de 512 bytes. En la tabla siguiente se muestra cómo establecer los parámetros de la función ClfsReserveAndAppendLogAligned .

Nombre de parámetro Value

pvMarshalContext

Puntero a un área de serialización.

rgWriteEntries

Puntero a una matriz de tres estructuras de CLFS_WRITE_ENTRY.

cWriteEntries

3

cbEntryAlignment

512

plsnUndoNext

CLFS_LSN_INVALID o el LSN del registro anterior en la cadena de deshacer. Para obtener más información sobre la cadena de deshacer, vea Números de secuencia de registro clFS.

plsnPrevious

CLFS_LSN_INVALID o el LSN del registro anterior en la cadena de LSN anterior. Para obtener más información sobre la cadena LSN anterior, consulte Números de secuencia de registro clFS.

cReserveRecords

0

rgcbReservation

NULL

fFlags

Cero o alguna combinación de marcas que especifican preferencias de vaciado y reserva.

plsn

Puntero a una estructura CLFS_LSN. (Se trata de un parámetro de salida que recibe el LSN del registro escrito).

Las tablas anteriores muestran solo algunas de las muchas variaciones en la reserva de espacio de registros y la escritura de registros en secuencias CLFS. Como piensa en otras variaciones, tenga en cuenta lo siguiente: las acciones realizadas por ClfsReserveAndAppendLog (o ClfsReserveAndAppendLogAligned) son atómicas. Por ejemplo, puede realizar una sola llamada a ClfsReserveAndAppendLog que reservará espacio para un registro y escribirá el registro en la secuencia. El par de acciones (reserva, escritura) se realizará correctamente como un todo o se producirá un error en su conjunto.