데이터의 일관성
Data consistency데이터 일관성은 서로 다른 장소에 보관된 동일한 데이터가 일치하는지 여부를 나타냅니다.
포인트 인 타임의 일관성
시점별 일관성은 백업 파일의 중요한 속성이며 백업을 생성하는 소프트웨어의 중요한 목표입니다.디스크 메모리 시스템의 설계, 특히 예기치 않게 셧다운되었을 때의 동작과도 관련이 있습니다.
관련 백업 예로서 온라인 백과사전 Wikipedia 등의 데이터베이스를 갖춘 웹사이트를 검토해 주십시오.Wikipedia는 24시간 가동해야 하지만 재해로부터 보호하기 위해 정기적으로 백업해야 합니다.위키피디아의 일부분은 매일 매분마다 업데이트되고 있으며, 한편 위키피디아의 데이터베이스는 백업에 몇 분 또는 몇 시간이 걸리는 1개 또는 여러 개의 매우 큰 파일 형태로 서버에 저장됩니다.
이러한 대용량 파일에는 다른 데이터베이스와 마찬가지로 위치별로 서로를 참조하는 수많은 데이터 구조가 포함되어 있습니다.예를 들어 일부 구조는 데이터베이스 하위 시스템이 검색 결과를 빠르게 찾을 수 있도록 하는 인덱스입니다.데이터 구조가 서로 제대로 참조되지 않으면 데이터베이스가 손상되었다고 할 수 있습니다.
카운터 예시
포인트 인 타임 정합성의 중요성은 백업 없이 백업을 수행할 경우 어떻게 되는지에서 확인할 수 있습니다.
Wikipedia의 데이터베이스가 20%의 중요한 인덱스를 가지고 있으며 문서 데이터를 75%로 저장하는 대용량 파일이라고 가정합니다.백업 실행 중에 에디터가 새로운 문서를 작성하는 시나리오를 생각해 봅시다.이러한 문서는 대용량 파일의 시작부터 끝까지 복사하고 데이터의 일관성을 고려하지 않는 단순한 "파일 복사"로 작성됩니다.문서 편집 시 50% 완료됩니다.새로운 기사가 기사 공간에 추가되고(75% 마크), 대응하는 인덱스 엔트리가 추가됩니다(20% 마크).
백업이 이미 절반 정도 완료되었고 인덱스가 이미 복사되었기 때문에 문서 데이터는 있지만 인덱스 참조가 누락된 상태로 백업이 작성됩니다.부정합으로 인해 이 파일은 파손된 것으로 간주됩니다.
실제로 위키피디아와 같은 실제 데이터베이스는 시간당 수천 번 편집될 수 있으며, 참조는 사실상 파일 전체에 퍼져 있으며 수백만, 수십억 또는 그 이상에 이를 수 있습니다.순차적인 "복사" 백업에는 말 그대로 작은 손상이 너무 많이 포함되어 있기 때문에 복구된 백업의 완전성을 보증할 수 없는 장시간의 복구 프로세스가 없으면 백업을 완전히 사용할 수 없게 됩니다.
데이터 일관성을 적절하게 고려하는 백업 프로세스를 통해 백업은 한 순간에 전체 데이터베이스의 모습을 스냅샷으로 확인할 수 있습니다.주어진 Wikipedia 예제에서는 75%의 추가 문서 없이 백업을 작성하므로 문서 데이터는 이전에 작성된 색인 데이터와 일관됩니다.
디스크 캐싱 시스템
시점의 일관성은 컴퓨터 디스크 서브시스템과도 관련이 있습니다.
특히 운영체제 및 파일시스템은 가동 중인 컴퓨터 시스템의 전원이 끊어지거나 크래시하거나 장애가 발생하거나 동작이 중단될 수 있습니다.적절하게 설계하면 전원이 끊겨도 데이터가 복구 불가능한 손상을 입지 않습니다.operating system과 파일 시스템은, 데이터가 하드 디스크에 일정한 순서로 써지도록 해, 이것에 의존해 예기치 않은 셧다운을 검출해 복구합니다.
한편, 데이터 무결성을 최대화하는 순서로 데이터를 디스크에 엄격하게 쓰는 것도 성능에 영향을 미칩니다.쓰기 캐싱 프로세스는 디스크 헤드를 이동하는 데 소요되는 시간을 최소화하여 쓰기 작업을 보다 빠르게 수행할 수 있도록 통합하고 순서를 재지정하는 데 사용됩니다.
쓰기 캐싱이 쓰기 수행 순서를 변경할 때 데이터 일관성에 문제가 발생합니다. 모든 쓰기가 순차적으로 커밋된다는 운영 체제의 예상을 위반하는 예기치 않은 종료가 발생할 가능성이 있기 때문입니다.
예를 들어, 일반적인 문서 또는 사진 파일을 저장하기 위해 운영체제는 다음 레코드를 다음 순서로 디스크에 쓸 수 있습니다.
- 파일 XYZ가 섹터 123에 저장될 예정이라는 저널 엔트리가 있습니다.
- XYZ 파일의 실제 내용을 섹터 123에 쓴다.
- 이제 섹터 123은 빈 공간/사용 공간 기록에서 점유됨으로 플래그가 지정됩니다.
- 저장 완료 파일을 기록한 저널 엔트리로, 이름은 XYZ이며 섹터 123에 있습니다.
operating system은, 항목 #1이 있는 경우(파일이 보존되고 있는 것을 전제로 하고 있습니다만, 그 항목 #4가 없어져 있는 경우(확정 성공), 보존 조작에 실패했기 때문에, 보존을 위해서 행해진 미완료 스텝(예를 들면, 섹터 123이 올바르게 채워지지 않았기 때문에, 빈 상태로 되어 있는 경우)을 원래대로 되돌릴 필요가 있는 것을 전제로 하고 있습니다.파일 디렉토리에서 XYZ 레코드를 삭제합니다).이러한 항목을 순차적으로 Disk에 커밋해야 합니다.
캐싱 알고리즘에 의해 이러한 항목을 4-3-1-2 순서로 디스크에 쓰는 것이 가장 빠를 것으로 판단되어 쓰기 시작하지만, 4개 쓰기 후, 3, 1, 2가 쓰기 전에 전원이 차단되므로 이러한 쓰기가 발생하지 않는다고 가정합니다.컴퓨터의 전원을 다시 켜면 파일 시스템에는 섹터 123에 있는 XYZ라는 이름의 파일이 포함되어 있다고 표시되지만, 이 섹터에는 파일이 포함되어 있지 않습니다(그 대신에, 섹터에는 가비지, 제로, 또는 오래된 파일의 랜덤 부분이 포함되어 있습니다).파일이 열려 있는 경우는, 이 섹터가 표시됩니다).
게다가 파일 시스템의 빈 공간 맵에는 섹터 123이 점유되고 있는 것을 나타내는 엔트리가 포함되어 있지 않기 때문에, 나중에 그 섹터를 다음에 보존할 파일에 할당할 가능성이 있습니다.그러면 파일 시스템에는 예기치 않게 같은 섹터를 요구하는 2개의 파일이 있습니다(크로스 링크 파일이라고 불립니다).그 결과, 어느 쪽인가의 파일에 기입하면, 다른 쪽 파일의 일부가 덮어쓰기 되어, 눈에 띄지 않게 파손됩니다.
포인트 인 타임의 일관성을 보증하는 디스크캐싱 서브시스템은 예기치 않은 셧다운이 발생했을 때 4개의 요소가 가능한5가지 방법 중 하나(1-2-3-4), 부분(1, 1-2, 1-2-3) 또는 전혀 쓰지 않는 것을 보증합니다.
서버에 탑재되어 있는 하이엔드 하드웨어 디스크 컨트롤러에는 캐시 메모리에 작은 배터리 백업 유닛이 탑재되어 있어 의도하지 않은 셧다운 위험을 줄이면서 쓰기 캐싱의 퍼포먼스를 향상시킬 수 있습니다.배터리 백업 유닛은, 셧다운중에도 메모리의 전원을 계속 공급하고 있기 때문에, 컴퓨터의 전원을 재투입했을 때에, 이전에 실행한 기입은 신속히 완료할 수 있습니다.이러한 컨트롤러를 사용하면 운영체제는 그 순서로 4개의 쓰기(1-2-3-4)를 요구할 수 있지만 컨트롤러가 가장 빠른 쓰기 방법을 4-3-1-2로 결정할 수 있습니다.컨트롤러는 기본적으로 운영체제에 속하며 기입이 순서대로 완료되었음을 보고합니다(전원이 끊겼을 경우 데이터 파손을 감수하고 성능을 향상시킵니다).또한 배터리 백업은 발생할 수 있는 모든 손상을 컨트롤러에 사일런트하게 복구하는 방법을 제공함으로써 데이터 파손의 위험을 회피합니다.결과적으로.
소자 4가 기입된 후에 전원이 차단되었을 경우, 배터리 백업 메모리에는 다른 3개의 항목에 대한 커밋 기록이 격납되어 다음 기회에 디스크에 기입(「플래시」)되도록 합니다.
트랜잭션 일관성
분산 데이터베이스 시스템 영역의 일관성(데이터베이스 시스템)은 데이터베이스 트랜잭션의 결과를 모든 노드에서 동시에 볼 수 있도록 하기 위해 많은 ACID 데이터베이스의 속성을 참조합니다.즉, 트랜잭션이 커밋되면 데이터베이스에 액세스하려는 모든 당사자가 해당 트랜잭션의 결과를 동시에 볼 수 있습니다.
거래 일관성의 중요성을 보여주는 좋은 예로는 송금을 처리하는 데이터베이스가 있다.송금을 할 때 차변 기입과 대변 기입의 두 가지 작업이 필요하다고 가정합니다.어떤 조작이 완료되어도 다른 조작이 완료되지 않았을 때 시스템이 크래시 또는 셧다운되어 이를 수정할 수 있는 것이 아무것도 없는 경우, 시스템은 트랜잭션의 일관성이 결여되어 있다고 말할 수 있습니다.송금할 경우 전체 거래가 완료되거나 완료되지 않는 것이 바람직하다.두 시나리오 모두 밸런스를 유지합니다.
트랜잭션의 일관성에 의해, 시스템의 전원이 켜졌을 때에 불완전한 트랜잭션을 검출해, 발견된 불완전한 트랜잭션의 일부를 실행 취소(또는 「롤백」)할 수 있도록 프로그램 됩니다.
응용 프로그램의 일관성
트랜잭션 일관성과 유사한 애플리케이션 일관성이 더 큰 규모로 적용됩니다.데이터는 단일 트랜잭션의 범위를 갖는 대신 하나 이상의 응용 프로그램에서 나오는 여러 트랜잭션 스트림의 범위 내에서 일관성이 있어야 합니다.애플리케이션은 다양한 유형의 데이터, 다양한 유형의 파일 및 다른 애플리케이션으로부터의 데이터 피드로 구성될 수 있습니다.응용 프로그램 일관성은 응용 프로그램의 실제 상태를 나타내는 모든 관련 파일 및 데이터베이스가 동기화되는 상태입니다.