2010-03-26 2 views
6

저는 온라인 파일 관리 프로젝트를 진행하고 있습니다. 우리는 데이터베이스 (SQL 서버)에 참조를 저장하고 파일 시스템에 데이터를 저장합니다.파일 시스템과 데이터베이스 간의 조정 방법은 무엇입니까?

우리는 파일을 업로드하는 동안 및 파일을 삭제하는 경우에도 파일 시스템과 데이터베이스 간의 조정 문제에 직면 해 있습니다. 먼저 데이터베이스에서 참조를 만들거나 파일 시스템에 파일을 저장합니다.

문제는 먼저 데이터베이스에서 참조를 만든 다음 파일 시스템에 파일을 저장하지만 파일 시스템에 파일을 저장하는 동안 오류가 발생하면 해당 파일에 대한 참조가 데이터베이스에 있지만 파일 시스템에 파일 데이터가 없습니다.

그런 상황을 어떻게 해결할 수있는 해결책을 알려주십시오. 나는 그것을 필요로합니다.

이 경우는 파일을 삭제하는 중에도 발생합니다.

+0

파일 시스템은 SQL을 사용하지 않는 특정 종류의 데이터베이스로 생각할 수 있으며 특히 blob을 저장하기 위해 조정됩니다. 따라서 어떤 의미에서 두 데이터베이스 (파일 시스템과 RDBMS)에 걸쳐 원 자성을 보장하는 방법을 묻고 있습니다. 둘 중 하나만 사용하도록 시스템을 설계 할 수 있습니까? – Will

+0

아니요, 우리는 파일 데이터/파일 본문을 저장하기 위해 참조 및 파일 시스템을 저장하기 위해 RDBMS를 사용하고 있습니까? –

+0

분명한 대답은 다른 방식으로 일을하는 것입니다. 데이터베이스는 파일 시스템보다 작동에 실패 할 가능성이 훨씬 적습니다. –

답변

0

하나의 트랜잭션으로 두 개의 이벤트 (참조 관리 및 파일 관리)를 처리하십시오. 둘 중 하나가 실패하면 다른 하나를 다시 시도하십시오. 그렇다면 두 가지가 맞지 않는 상황에 처하게되면 어려워 질 것입니다. 파일 시스템 작업보다 데이터베이스 작업을 롤백하는 것이 더 쉽습니다.

5

파일 시스템에 대한 액세스는 실제로 트랜잭션 적이 아닙니다. all-or-nothing 분산 트랜잭션을 직접 시뮬레이트해야합니다. 데이터베이스의 커밋이 실패하면 파일 시스템에서 파일을 삭제하십시오. 반대로, 파일 쓰기가 실패하면 데이터베이스 트랜잭션을 롤백합니다 (조금 더 복잡하지만 대략적인 스케치입니다).

파일이 업데이트 될 때 상당히 복잡 할 수 있습니다. 먼저 파일을 복사해야 파일을 덮어 쓴 후에 데이터베이스 트랜잭션이 실패 할 경우 파일의 이전 버전을 복원 할 수 있습니다. 원하는지 여부는 견고성 수준 인에 따라 달라집니다.

모든 조작은 응용 프로그램 (파일 작성, 쓰기, 삭제)을 통해 시행하도록하십시오. 이 작업을 수행 할 수없고 파일 시스템에서 파일에 직접 액세스하는 것을 막을 수는 없지만 파일 시스템과 데이터베이스를 주기적으로 동기화하는 것 외에는 다른 방법이 없습니다. 어떤 파일이 제거되었는지 확인하고 삭제하십시오. 데이타베이스의 엔트리. 각각 X 분 실행되는 작업을 만들 수 있습니다.

또한 해시 (예 : MD5)을 데이터베이스에 저장하는 것이 좋습니다. 시간을 들여 계산해보세요.하지만 문제를 발견하는 데 엄청난 도움이되었습니다. 파일 시스템에서 오류가 있지만 데이터베이스가 아닌 파일의 이름이 바뀐 경우. 또한 무결성 검사를 주기적으로 실행하여 아무 것도 확인되지 않았 음을 확인할 수 있습니다.

이 방법이 충분하지 않은 경우 (예 :보다 견고 해지기를 원한다면), LOB의 데이터베이스에 바이너리를 저장하는 것 외에 다른 방법은 없습니다. 그렇다면 그것은 정말로 거래적이고 안전 할 것입니다.

1

내가 아는 오래된 질문하지만, 다른 독자의 이익을 위해 :

운영 체제에 따라이 거래 TXF

http://msdn.microsoft.com/en-us/magazine/cc163388.aspx

+0

Microsoft는 앞으로 TxF를 향후 사용할 수 없도록 계획하고 있습니다. SQL [FILESTREAM] (http://technet.microsoft.com/en-us/library/bb933993.aspx)과 같은 [대체 방법] (http://msdn.microsoft.com/en-us/hh802690)을 사용하는 것이 좋습니다.)에스. – mwolfe02

관련 문제