2013-06-16 5 views
1

나는 약 100 대의 클라이언트 (대부분 1 ~ 2 대의 Macs/Ubuntas가있는 Windows 머신)를 가지고 있으며, 동기화 된 파일 (액세스 권한을 대부분 관리)에서 거의 작동하지 않는 중앙 서버를 통해 클라이언트간에 엄청난 수의 파일을 동기화해야합니다.어떻게하면 파이썬 클라이언트에서 서버로 거대한 파일을 효과적으로 전송할 수 있습니까?

  1. 를 사용하여 XML-RPC : 들어

    는 지금은 두 가지 솔루션을 참조하십시오. 멋지지만 성능에 대해서는 잘 모르겠습니다. 그로부터 나는이 접근 방식의 성능을 보았습니다.

  2. scp의 ftp로 paramiko 및 복사 파일을 사용하십시오. 내가 riak 이내에 파일을 저장 해요 때문에 그 솔루션을 좋아하지 않아 그것은 서버 쪽에서 이중 I/O 작업이 될 것이다 : 첫째, 디스크에 파일을 작성하고 두 번째 디스크에서 파일을 읽고 마침내 riak에 씁니다 .

소켓을 사용하고 파일 전송 코드를 작성하는 것과 같은 세 번째 방법이 있습니까? 비동기 XML-RPC 서버가 있습니까? 내 작업에 하나가 필요합니까? 파일 전송시

운영 :

  1. 인증 사용자의 디스크 할당량 확인

  2. 사용자 (읽기/각 파일/디렉토리를 작성할 수)

  3. 규칙 기반 액세스 권한 Managment를 업로드의 .

  4. 특정 수준의 내결함성이 필요하기 때문에 파일을 riak에 배치합니다.

이 응용 프로그램은 실제로 rsync보다 Dropbox에 더 가까운 것으로 나타났습니다. 우리는 실제로 dropbox api를 사용 하겠지만이 스토리지는 다른 시스템과 깊숙이 통합되어 더 많은 제어권을 원했습니다.

답변

0

당신이 "파일의 엄청난 숫자 동기화"라고 말할 때 가장 먼저 생각하는 것은 rsync입니다. 이 도구를 모르는 경우에는 로컬 및 원격 디렉토리를 효율적으로 동기화 할 수 있습니다. 변경되지 않은 항목은 생략하여 매우 효율적으로 구성 할 수 있습니다.

이제 서버가 "동기화 된 파일을 거의 사용하지 않습니다"라고 말하면 "거의"무엇이 있습니까? 파일에 아무 것도없는 경우 rsync를 사용할 수 있습니다. 실제로 파일에 과도한 계산이있는 경우이 비용이 전송 비용을 줄여 주므로 IO가 병목 현상이 아니며 성능 저하없이 모든 도구를 사용할 수 있습니다.

이제 서버의 파일을 미러링하고 거기에서 다양한 수정 사항을 적용 할 수 있다면 rsync를 사용하여 효율적으로 파일을 전송할 수 있습니다. 이렇게하면 파일 전송 휠을 다시 만들지 않고 검증 된 인프라를 기반으로 구축 할 수 있습니다. 나는 당신의 설명에서 당신이하고있는 것이 정확히 무엇인지 이해하지 못한다고 여기에서 강조해야한다. 아마도 당신이 요구 사항을 조금 더 설명했다면 더 좋거나 다른 대답이 될 것이다. 업데이트 된 질문에 따라

편집 :

당신도 MS Windows 시스템에서 액세스를 동기화 할 수 있도록해야한다 Python rsync 바인딩이 있습니다

.OS X에 대해서는 언급하지 않았지만, POISX에 가깝기 때문에 많은 번거 로움없이 작동 할 가능성이 높습니다. 서버 측에서는 변경 사항 (예 : iwatch 등)을 로컬 파일 시스템에서 모니터링 한 다음 차이점을 DB에 적용합니다. 이 둘을 사용하면 나중에 성능이 충분하지 않으면 rsync 서버 (오픈 소스)에 연결하여 파일 시스템을 통하지 않고 DB 업데이트를 트리거 할 수 있습니다.

+0

rsync는 매우 흥미롭지 만 rsync는 Windows에서 얼마나 효과가 있습니까? 또한 질문을 업데이트했습니다. 개발 된 응용 프로그램은 실제로는 rsync보다 Dropbox에 더 가깝습니다. 우리는 실제로 dropbox api를 사용 하겠지만이 스토리지는 다른 시스템과 깊숙이 통합되어 더 많은 제어권을 원했습니다. – Moonwalker

관련 문제