Làm thế nào để hầu hết các chương trình đồng bộ theo dõi thay đổi tập tin?


9

Các chương trình đồng bộ hóa như Dropbox thường theo dõi các thay đổi của tệp bằng cách thực hiện so sánh byte bằng cách sử dụng băm hoặc sử dụng diff/ giữ / ghi nhật ký cam kết cục bộ như kiểm soát phiên bản, hay sao?

Câu trả lời:


8

Trên Windows có một cơ chế để HĐH cảnh báo bạn khi có thay đổi cấu trúc thư mục 'đã xem' - FindFirstChangeNotification (). Khi điều đó chỉ ra một tệp đã thay đổi, một ứng dụng có thể tiến hành so sánh các tệp trong thư mục đã thay đổi để tìm các tệp thực tế đã thay đổi bằng cách xem kích thước, ngày sửa đổi, hàm băm, v.v.

Điều này (như Michael chỉ ra dưới đây) là điều mà mỗi nền tảng sẽ cung cấp theo một cách nào đó. Tôi không nói loại này là duy nhất cho Windows.


1
Và có inotify trên Linux.
Michael

Nhưng nếu chương trình đồng bộ hóa không chạy tại thời điểm thay đổi tệp thì sao? Nó sẽ không bỏ lỡ cơ hội được thông báo bởi hook?
mcandre

Bạn đã sử dụng ví dụ cụ thể của dropbox, thường chạy trong nền. Rõ ràng nếu chương trình không chạy, nó sẽ không được thông báo. Sau đó, nó phải sử dụng các phương pháp khác (ngày sửa đổi, có lẽ). Tôi không nghĩ rằng bạn sẽ nhận được câu trả lời cụ thể về những phương pháp cụ thể được sử dụng, bởi vì các chương trình khác nhau làm những việc khác nhau. Tốt hơn để hỏi những người tạo ra các chương trình cụ thể trong câu hỏi.
GrandmasterB

@mcandre Khá nhiều những gì GrandmasterB đã nói - nếu bạn bỏ lỡ thông báo, bạn sẽ phải quét thư mục. Tùy thuộc vào mức độ "chính xác" mà bạn muốn trở thành, điều này có thể chỉ đơn giản là tìm kiếm các tệp mới và dấu thời gian / kích thước tệp đã sửa đổi (chúng tương đối rẻ tiền để làm) hoặc trong trường hợp xấu nhất, so sánh toàn bộ tệp. Các chương trình như rsync thường băm tệp theo từng khối, do đó, những thay đổi sớm trong dữ liệu có thể được phát hiện sớm hơn, nhưng trong trường hợp xấu nhất (các tệp giống hệt nhau), bạn sẽ đọc toàn bộ nội dung.
Daniel B

2

Cuối cùng để so sánh các tệp bạn cần so sánh từng byte - làm thế nào khác bạn sẽ nhận thấy một thay đổi byte đơn?

Trong thực tế, bạn đọc các khối byte và tính toán giá trị băm, sau đó bạn kiểm tra danh sách các giá trị băm. Một ví dụ điển hình là " rsync "

Theo như tôi biết thì dropbox chỉ trích toàn bộ tệp, vì vậy sẽ tính toán một hàm băm của toàn bộ tệp để kiểm tra cùng một tệp


1
pst trên một số hệ thống tập tin có một ngày được sửa đổi
ratchet freak

1
Việc băm sẽ không tạo ra rủi ro va chạm nhỏ nhưng thực sự dẫn đến một tệp không được đồng bộ hóa? Dropbox rõ ràng sử dụng một triển khai giống như khác. dropbox.com/help/8/vi
mcandre

1
@mcandre nghe có vẻ tốt hơn là câu hỏi của chính nó.
GrandmasterB

@ratchetfreak: ngày sửa đổi, trên một số hệ thống, không nhất thiết đáng tin cậy cho loại vấn đề này. Một liên lạc đơn giản sẽ làm cho ngày được sửa đổi khác nhau, trong đó đồng bộ hóa có thể không thực sự được yêu cầu.
Steven Evers

1
@SnOrfus sau đó kiểm tra lại các thay đổi khi ngày sửa đổi được thay đổi
ratchet freak

1

Ví dụ, .NET có lớp FileSystemWatcher. Tôi chắc rằng các ngôn ngữ và thời gian chạy cấp thấp khác có thể cung cấp các khả năng tương tự.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.