2011-12-05 86 views
1

我知道有幾個程序可以通過網絡同步文件。他們中沒有一個做我一直在想的東西。讓我解釋一下我想達到什麼......有效地通過網絡複製文件的算法

在我的網絡多臺計算機共享相同的文件。例如,quickbooks文件被多臺計算機訪問,並且它是一個大文件。還有來自outlook large的pst文件。每晚我們都會通過已更改文件的網絡創建備份。我認爲如果複製一個1 GB的文件,如果它有一些小的修改,就不會使它變得更加複雜。所以我想提出一個比較文件部分的算法。

例如,讓我們說,Outlook的PST文件由一個字節:

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

如果我收到一封電子郵件,該字節現在是:

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

現在,而不是發送整個文件它會更容易只發送字節10

所以在現實中的文件有數千字節的,所以我會做文件的每兆字節的校驗所以現在我的表應該看起來像:

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

如果現在接收電子郵件的PST文件時有一個表:

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... 

我覺得這個算法將工作的偉大,如果是對文件的末尾,但在現實中添加的內容字節可能會在文件的開始處發生更改,我的算法無法正常工作。例如,如果一個字節是在文件中的所有十六進制代碼將改變的開頭加入...

我怎樣才能使算法更有效率?這將是很好,如果我可以把文件的部分,而不是整個文件

回答

3

rsync的協議將有效的大容量文件小的差異同步的。它比你所設想的方案更聰明,所以你應該在着手自己的解決方案或只使用rsync之前閱讀Tridgell和Mackerras的write-up。有一個免費的Windows包裝here

2

你可能想看看rolling checksumsalgorithm rsync uses

基本上,你計算散列,你上面描述的一大塊,但你也計算滾動校驗和。滾動校驗和的屬性允許您更有效地檢查,例如,一個字節被附加到文件的開頭。