2012-03-20 2 views
1

몇 개의 파일, 이미지, 텍스트가있는 폴더가 있다고 가정합니다. 여러 파일이 있고 폴더가 다소 큽니다 (> 100MB). 이제이 폴더에서 다섯 개의 파일을 업데이트하고 싶습니다.하지만이 작업을 원자화하려고합니다. 일반적으로 임시 폴더를 만들고 그 안에 모든 내용을 기록한 다음 성공하면 기존 폴더를 바꿉니다. 그러나 I/O가 비싸기 때문에이 방법을 사용하고 싶지 않습니다. 5 개를 업데이트하기 위해 수백 개의 파일을 다시 저장하면 거대한 오버 헤드처럼 보입니다. 하지만이 다섯 개의 파일을 어떻게 원자 적으로 작성해야합니까? 참고, 필자는 모든 파일을 원자 단위로 작성하고 각 파일을 개별적으로 작성하지 않기를 바랍니다.여러 파일을 원자 적으로 쓰기

답변

3

당신은 원래의 솔루션을 적응할 수 :

  1. 원본 파일에 대한 하드 링크의 전체 임시 폴더를 만듭니다.
  2. 다섯 개의 새 파일을 임시 폴더에 저장하십시오.
  3. 원본 폴더를 삭제하고 하드 링크의 폴더를 해당 위치로 이동하십시오.

몇 개의 링크를 만들면 속도가 빨라야하며 모든 파일을 다시 작성하지 않아도됩니다.

+0

경고 : 새 파일의 일부가 나타나지 않고 다른 파일이없는 시간을 피할 수는 있지만 외부 관찰자가 폴더가 완전히 누락 된 것으로 보이는 시간이 있음을 의미합니다. 원자 적으로 이전 폴더를 제거하고 새 폴더를 제 위치로 이동할 수 없습니다. (단, 3 단계 : 3a : 원래 폴더의 이름을 바꿀 것, 3b. 새 폴더의 이름 바꾸기, 3c. 이름이 변경된 원래 폴더 삭제 원래 폴더를 삭제하면 외부에있는 시간이 최소화됩니다. 관찰자는 이상한 것을 볼 수 있습니다.) –

+0

이 접근법에 대한 또 다른 문제점을 생각했습니다. 다른 프로세스가 1 단계 이후와 3a 단계 이전에 대상에 파일을 만드는 경우에는 어떻게됩니까? 예를 들어이 두 기술을 동시에 사용하는 두 개의 프로그램을 생각해보십시오. 조심하지 않으면 파일을 잃어 버릴 수 있습니다. 보다 안전한 방법은 임시 위치에 파일을 만들고 대상 폴더의 독점적 액세스를 요청하는 방법으로 대상 폴더의 이름을 바꾸고 파일을 이동 한 다음 다시 이름을 바꿀 수 있습니다. 그러나, 당신이하려고하는 것은 본질적으로 비 원자적이고 당신은 정말로 그것을 둘러 쌀 수 없습니다. 독약을 고르면됩니다. –

관련 문제