CLFS 스트림에 데이터 레코드 쓰기

CLFS(Common Log File System) 스트림에는 데이터 레코드 및 다시 시작 레코드라는 두 가지 유형의 레코드가 있습니다. 이 항목에서는 스트림에 데이터 레코드를 쓰는 방법을 설명합니다. 다시 시작 레코드를 작성하는 방법에 대한 자세한 내용은 CLFS 스트림에 다시 시작 레코드 쓰기를 참조하세요.

CLFS 스트림에 데이터 레코드를 작성하려면 먼저 ClfsCreateMarshallingArea를 호출하여 마샬링 영역을 만들어야 합니다. 그런 다음, 마샬링 영역(휘발성 메모리에 있음)에 레코드를 추가할 수 있으며 CLFS는 주기적으로 레코드를 안정적인 스토리지로 플러시합니다.

스트림에 데이터 레코드를 쓰는 방법에는 몇 가지 변형이 있습니다. 예를 들어 미리 공간을 예약한 다음 여러 레코드를 작성하거나 공간을 예약하지 않고 레코드를 작성할 수 있습니다. 마샬링 영역에 쓰는 레코드를 안정적인 스토리지에 즉시 큐에 대기하도록 요청하거나 CLFS가 해당 정책에 따라 레코드를 큐에 대기하도록 할 수 있습니다.

데이터 레코드 작성에 대한 모든 변형에 대해 다음 단계를 완료합니다.

  1. 하나 이상의 CLFS_WRITE_ENTRY 구조체 배열을 만듭니다. 각 쓰기 항목 구조는 레코드 데이터로 채워진 버퍼를 가리킵니다.

  2. ClfsReserveAndAppendLog 또는 ClfsReserveAndAppendLogAligned를 호출합니다.

다음 하위 섹션의 표에서는 스트림에 레코드를 쓰는 여러 변형에 대해 ClfsReserveAndAppendLog 의 매개 변수를 설정하는 방법을 보여 줍니다.

스트림에 단일 데이터 버퍼 작성

마샬링 영역에 쓰려는 단일 데이터 버퍼가 있다고 가정해 보겠습니다. CLFS 정책에 따라 레코드를 안정적인 스토리지로 플러시하도록 허용하려고 하며 레코드가 레코드 체인의 일부가 되는 것을 원하지 않습니다. 다음 표에서는 ClfsReserveAndAppendLog를 호출할 때 매개 변수를 설정하는 방법을 보여 줍니다.

매개 변수 이름

pvMarshalContext

마샬링 영역에 대한 포인터입니다.

rgWriteEntries

CLFS_WRITE_ENTRY 구조체에 대한 포인터입니다.

cWriteEntries

1

plsnUndoNext

CLFS_LSN_INVALID

plsnPrevious

CLFS_LSN_INVALID

cReserveRecords

0

rgcbReservation

NULL

fFlags

0

plsn

CLFS_LSN 구조체에 대한 포인터입니다. (기록된 레코드의 LSN을 수신하는 출력 매개 변수입니다.)

CLFS 로그 레코드 집합에 대한 공간 예약

ClfsReserveAndAppendLog를 사용하여 실제로 레코드를 작성하지 않고도 로그 레코드 집합에 대한 마샬링 영역에 공간을 예약할 수 있습니다. 다음 표에서는 레코드 공간을 예약하도록 매개 변수를 설정하는 방법을 보여줍니다.

매개 변수 이름

pvMarshalContext

마샬링 영역에 대한 포인터입니다.

rgWriteEntries

NULL

cWriteEntries

0

plsnUndoNext

CLFS_LSN_INVALID

plsnPrevious

CLFS_LSN_INVALID

cReserveRecords

rgcbReservation이 가리키는 배열의 요소 수입니다.

rgcbReservation

LONGLONG 형식 변수 배열에 대한 포인터입니다. 배열의 각 요소는 공간이 예약될 레코드의 크기(바이트)입니다. 레코드의 데이터 부분 크기입니다. 머리글 또는 안쪽 여백의 크기를 포함할 필요가 없습니다.

fFlags

0

plsn

NULL

참고 마샬링 영역에서 공간을 예약하는 또 다른 방법은 ClfsAlignReservedLog 를 호출한 다음 ClfsAllocReservedLog를 호출하는 것입니다.

예약된 공간에 레코드 작성

크기(바이트)가 100, 200 및 300인 레코드 3개에 대해 이미 예약된 공간이 있다고 가정합니다. 마샬링 영역에는 예약된 레코드 수가 3개이고 600바이트의 레코드 데이터, 레코드 헤더 및 맞춤에 필요한 패딩을 보유할 수 있는 충분한 예약 공간이 있습니다.

이제 이러한 레코드 중 하나를 마샬링 영역의 예약된 공간에 쓰려고 합니다. 사용 가능한 예약 공간이 줄어들고 예약 레코드 수가 3에서 2로 감소합니다. 다음 표에서는 ClfsReserveAndAppendLog를 호출할 때 매개 변수를 설정하는 방법을 보여 줍니다.

매개 변수 이름

pvMarshalContext

마샬링 영역에 대한 포인터입니다.

rgWriteEntries

CLFS_WRITE_ENTRY 구조체의 배열에 대한 포인터입니다.

cWriteEntries

rgWriteEntries가 가리키는 배열의 요소 수입니다.

plsnUndoNext

실행 취소 체인에서 이전 레코드의 LSN 또는 CLFS_LSN_INVALID. 실행 취소 체인에 대한 자세한 내용은 CLFS 로그 시퀀스 번호를 참조하세요.

plsnPrevious

이전 LSN 체인의 이전 로그 레코드 또는 LSN을 CLFS_LSN_INVALID. 이전 LSN 체인에 대한 자세한 내용은 CLFS 로그 시퀀스 번호를 참조하세요.

cReserveRecords

0

rgcbReservation

NULL

fFlags

CLFS_FLAG_USE_RESERVATION

plsn

CLFS_LSN 구조체에 대한 포인터입니다. (기록된 레코드의 LSN을 수신하는 출력 매개 변수입니다.)

정렬된 항목을 사용하여 레코드 작성

3개의 쓰기 항목이 있는 레코드를 작성한다고 가정합니다. 쓰기 항목의 크기는 300바이트에서 500바이트 사이이지만 각 쓰기 항목은 512바이트 경계에서 시작해야 합니다. 다음 표에서는 ClfsReserveAndAppendLogAligned 함수의 매개 변수를 설정하는 방법을 보여 줍니다.

매개 변수 이름

pvMarshalContext

마샬링 영역에 대한 포인터입니다.

rgWriteEntries

세 CLFS_WRITE_ENTRY 구조체의 배열에 대한 포인터입니다.

cWriteEntries

3

cbEntryAlignment

512

plsnUndoNext

실행 취소 체인에서 이전 레코드의 LSN 또는 CLFS_LSN_INVALID. 실행 취소 체인에 대한 자세한 내용은 CLFS 로그 시퀀스 번호를 참조하세요.

plsnPrevious

이전 LSN 체인의 이전 로그 레코드 또는 LSN을 CLFS_LSN_INVALID. 이전 LSN 체인에 대한 자세한 내용은 CLFS 로그 시퀀스 번호를 참조하세요.

cReserveRecords

0

rgcbReservation

NULL

fFlags

플러시 및 예약 기본 설정을 지정하는 플래그의 0개 또는 일부 조합입니다.

plsn

CLFS_LSN 구조체에 대한 포인터입니다. (기록된 레코드의 LSN을 수신하는 출력 매개 변수입니다.)

앞의 표는 레코드 공간을 예약하고 CLFS 스트림에 레코드를 쓰는 데 있어 몇 가지 변형만 보여 줍니다. 다른 변형을 생각할 때 다음 사항에 유의하세요. ClfsReserveAndAppendLog(또는 ClfsReserveAndAppendLogAligned)에서 수행하는 작업은 원자성입니다. 예를 들어 레코드의 공간을 예약하고 레코드를 스트림에 쓰는 ClfsReserveAndAppendLog 를 단일 호출할 수 있습니다. 작업 쌍(예약, 쓰기)은 전체적으로 성공하거나 전체적으로 실패합니다.