2015-01-31 25 views
2

일부 OS 이벤트를 사용하여 앱이 실행 중일 때 File System의 변경 사항을 확인할 수 있음을 이해합니다. 응용 프로그램이 실행되고 있지 않을 때 궁금한 점이 있습니다. 파일 시스템에 많은 변경을 가하면 추가/수정/삭제/이름 바꾸기가 거의 없습니다. Dropbox가 이러한 변경 사항을 식별하는 데 사용하는 알고리즘은 무엇입니까? 내가 생각할 수있는 한 가지는 파일 시스템의 파일의 마지막 수정 시간을 LMT가 저장된 값과 비교하여 앱이 실행될 때를 비교하는 것입니다. 이 경우 모든 파일을 반복해야했습니다. 그러나 이름을 변경하면 LMT가 변경되지 않습니다. LMT에 대한 의존도가 그만큼 높기 때문에 더 나은 접근 방법이 있는지 알고 싶습니까?앱이 실행되지 않을 때 dropbox가 로컬로 변경된 파일/폴더 목록을 식별하는 데 사용하는 알고리즘은 무엇입니까?

의견이 있으십니까?

당신은 보관 처리 루트 디렉토리가 :

답변

3

은 여기 보관이 그것을 처리하는 방법입니다하지만 만약 내가 모르는 유용 할 수있는 전략이다. Dropbox라면 서버에있는 각 파일에 대해 해시를 유지합니다. 루트에서 시작하여 앱은 파일 트리 (디렉토리 + 파일)를 스캔하고 각 파일의 해시를 계산합니다.

검색하면 이중 색인 해시 테이블이 생성됩니다. 각 파일 및 디렉토리는 루트 Dropbox 디렉토리의 상대 경로를 사용하여 색인화됩니다. 두 번째 색인은 각 파일의 해시를 사용하여 작성됩니다.

이제 앱에서 이중 색인 해시 테이블을 검사하고 설정했습니다. 그런 다음 서버는 튜플 (상대 경로, 파일의 해시를)로 보냅니다. ( f를, 시간가)와 같은 파일 튜플하자 :

  1. 응용 프로그램은 f를 사용하여 경로의 색인을 통해 파일을 얻을려고 것이다 : 결과를있는 경우 이
    1. 비교 해시. 일치하지 않으면 원격 서버의 파일을 업데이트하십시오.
    2. 결과가 없으면 파일이 삭제되었거나 이동/이름이 변경되었을 수 있습니다. 그런 다음 응용 프로그램은 h을 사용하여 해시 색인을 통해 파일을 가져 오려고합니다. 일치하는 항목이 있으면 해당 파일이 여전히 다른 경로 (이동 또는 이름 변경) 아래에 있음을 의미합니다. 응용 프로그램은 정보를 보내고 파일은 적절하게 이동/서버에서 이름이 바뀌 었습니다.
  2. 해시 또는 경로를 사용하여 파일을 찾지 못했습니다. Dropbox 파일 트리에서 삭제되었습니다. 서버에서 적절히 삭제합니다.

이 전략은 일치하는 파일을 클라이언트 또는 서버에서 업데이트해야 하는지를 알 수있는 동기화 메커니즘이 필요합니다. 이는 Dropbox (클라이언트와 서버)와 마지막 업데이트를 수행 한 사람 (서버에서)이 실행 한 마지막 업데이트 시간을 저장하여 수행 할 수 있습니다.

+0

감사합니다. 파일의 해시 인 두 번째 인덱스를 자세히 설명 할 수 있습니까? 해시는 무엇을 나타내는가? 나는 그 예를 생각하는 것이 더 좋다고 생각한다. 이처럼 클라우드와 로컬 모두에서 계층 구조를 동기화했다고 가정 해 보겠습니다. /file1.txt, /file2.txt, /folder1/file3.txt. 이제는 앱을 종료하고 로컬 파일 시스템을 변경했다고 가정 해 봅니다. a) 파일 1을 삭제했습니다. b) 새 folder2를 /folder2/file4.txt와 추가하여 클라우드에서 변경했습니다. a) file2.txt가 제거되었습니다. b) 이름이 바뀌 었습니다. folder1 to folder4 c) folder5를 추가했습니다. 이 접근 방식은 어떻게 작동하며 앱이 시작될 때 로컬 및 클라우드 변경 사항을 한 번 발견합니까? – Engineer