2011-12-05 3 views
1

네트워크를 통해 파일을 동기화하는 몇 가지 프로그램이 있다는 것을 알고 있습니다. 그들 중 누구도 내가 생각해 왔던 것을하지 않습니다. 내가 성취하고자하는 것을 설명해 드리겠습니다 ...네트워크를 통해 파일을 효율적으로 복사하기위한 알고리즘

내 네트워크에서 여러 컴퓨터가 동일한 파일을 공유합니다. 예를 들어, quickbooks 파일은 여러 컴퓨터에서 액세스 할 수 있으며 큰 파일입니다. 또한 Outlook의 pst 파일도 있습니다. 매일 밤 우리는 변경된 파일의 네트워크를 통해 백업을 만듭니다. 나는 그것이 사소한 수정을했다면 전체 1GB 파일을 복사하는 것은 sanse가되지 않는다고 생각한다. 그래서 파일의 일부를 비교할 알고리즘을 생각해 내고 싶습니다. 내가 이메일을받은 경우

1, 2, 3, 4, 5, 6, 7, 8, 9  

바이트는 지금 것 :

1, 2, 3, 4, 5, 6, 7, 8, 9, 10 for example 

을 지금 대신에 전체 파일을 전송하는

예를 들어,의는 전망 PST 파일 바이트로 구성되어 있다고 가정 해 봅시다 바이트 10을 보내는 것이 더 쉬울 것입니다.

실제로 파일에 수천 바이트가 있으므로 파일의 모든 체크섬을 체크섬 할 것입니다. : 내용이 파일의 끝 부분 그러나 실제로 A의 추가되었을 경우 나는이 알고리즘은 잘 작동합니다 생각

aaa1, aaa2, aaa3, 7a8b, etc ... then I know that the first 3 megabits are the same and I should send just one megabite instead of the entire file... 

: 지금 PST 파일을 이메일을 수신 할 때하는 것은 같은 테이블이있는 경우

aaa1, aaa2, aaa3, abf8, etc... 

바이트는 파일의 시작 부분에서 변경 될 수 있으며 알고리즘은 작동하지 않습니다. 예를 들어 한 바이트가 파일의 시작 부분에 추가되면 16 진수 코드가 모두 변경됩니다 ...

어떻게 알고리즘을보다 효율적으로 만들 수 있습니까? 전체 파일 대신 파일의 일부를 보낼 수 있다면 좋을 것입니다.

답변

3

rsync 프로토콜은 대용량 파일을 작은 차이로 효율적으로 동기화합니다. 그것은 당신이 생각한 계획보다 훨씬 더 똑똑하기 때문에 자신의 솔루션에 착수하기 전에 Tridgell과 Mackerras의 write-up을 읽거나 rsync을 사용해야합니다. 무료 Windows 래퍼 here이 있습니다.

2

rolling checksumsalgorithm rsync uses을 살펴볼 수 있습니다.

기본적으로 청크에서 위에서 설명한대로 해시를 계산하지만 롤링 체크섬도 계산합니다. 롤링 체크섬에는 예를 들어 한 바이트가 파일의 시작 부분에 추가 된 것을보다 효율적으로 확인할 수있는 속성이 있습니다.