2012-02-03 4 views
0

현재 설치/제거 파일처럼 작동하는 시스템을 설계하고 있습니다. 설치를위한 기본 작업은 파일을 생성하고 파일 정보를 데이터베이스에 저장하며, 제거는 일부 파일을 제거하고 관련 정보를 데이터베이스에 저장합니다. 깨끗한 실패의 요구 사항은 어떤 문제로 인해 설치/제거 작업이 실패 할 때마다 시스템이 완전한 설치/제거 또는 전혀 정리되지 않은 상태 여야한다는 것입니다.권장되는 오류 복구 메커니즘은 무엇입니까

권장되는 메커니즘은 무엇입니까?

답변

1

가역성 패턴 내 마음에 공격 : 명령 및

Command pattern 기념물

는 일반적으로 작업을 깨끗하고 실행 취소 구현에 사용됩니다.

함으로써 당신이 다른 요청 클라이언트를 파라미터 큐 또는 요청을 기록, 지원 취소 작업을시키는, 요청을 객체로 캡슐화합니다.

또한 Memento pattern도 참조 할 수 있습니다.

메멘토 패턴 ( 롤백 통해 취소) 이전 상태로 오브젝트를 복원 할 능력을 제공하는 디자인 패턴이다.

기념품 패턴은 발신자 과 관리인의 두 개체로 구현됩니다. 생성자는 내부에 상태의 개체입니다. 관리인이 발신자에게 무언가를 할 것이지만, 은 변경을 취소 할 수 있기를 원합니다. 케어 테이커는 먼저 발신자에게 기념품 개체를 요청합니다. 그런 다음 모든 작업 (또는 작업 순서)을 수행합니다. 연산 전에 상태로 롤백하려면 메시지 객체를 보낸 사람에게 반환합니다.

+0

실제 파일 조작이있을 때와 같이 제거하면 10 개의 파일을 제거하고 데이터베이스를 업데이트해야하지만 실패한 설치 제거는 3 개의 파일을 제거하고 4 번째 파일 삭제 작업에서 실패한 경우 복구하는 방법 ? 가장 직접적인 방법은 파일과 데이터베이스의 사본을 저장하고 실패 할 때 다시 복사하는 것입니다. 다른 좋은 아이디어가 있습니까? – nobody

+0

제거를 수행 할 때 삭제할 파일을 임시 디렉토리의 폴더로 이동할 수 있습니다. 일단 모든 것이 올바르게 옮겨 졌다는 것을 확인한 후에는 실제 삭제 명령을 실행하여 임시 디렉토리에서 생성 한 폴더를 제거하십시오. 임시 디렉토리가 설치 디렉토리와 다른 디스크 볼륨에 있다면 (힌트는 아마 디스크를 가로 질러 복사하고 싶지 않을 것입니다) 어떻게 할 것인가와 같은 몇 가지 고려 사항이 있습니다. – Idles

0

데이터베이스에서 커밋/롤백 작업을 말하는 것처럼 들립니다.

What is commit and rollback? IBM. 트랜잭션 시스템에서

, 커밋 및 롤백은 응용 프로그램이 복구의 하나의 단위 (UR)로 표현되는 자원에 대한 변경을 모두 하나되도록하는 데 사용 행동의 집합을 의미합니다 또는 전혀 변경하지 않습니다 . 2 단계 커밋 프로토콜은 커밋과 롤백을 제공합니다. 요소 중 하나 (예 : 응용 프로그램, 시스템 또는 자원 관리자)가 실패하더라도 모든 변경 사항 또는 변경 사항이 적용되지 않는지 확인합니다. 프로토콜을 사용하면 시스템 또는 서브 시스템이 실패한 후에 다시 시작 및 복구 처리가 수행됩니다.

모든 DB는 이러한 작업을 지원해야합니다. 예를 들어 MySQL documentation을 참조하십시오.

관련 문제