2015-02-04 3 views
1

시간별로 생성되는 XML 형식으로 저장된 가격 데이터가 있습니다. XML로 저장하면 약 100MB 크기입니다. 이 데이터를 처리하려면 메인 시스템으로이 데이터를 보내야합니다. 앞으로이 데이터 크기가 1m로 전송 될 수도 있습니다.시스템간에 큰 데이터를 전달하는 방법

이 데이터를 보내는 가장 좋은 방법은 무엇입니까? 지금까지의 내 생각은 다음과 같습니다.

- It would be too large to send as JSON to a POST endpoint 
- Possible to send it as XML and store it on my server 

더 좋은 방법이 있습니까?

+2

압축하십시오. gzip 또는 bzip2를 사용하여 XML을 80 % 축소하는 것이 일반적입니다. scp 또는 심지어 ftp와 같은 바이너리 프로토콜로 복사 할 수 있습니다. 100Meg는 너무 커서 html로 전송할 수 없습니다. 정기적으로 멀티 기가 파일을 다운로드합니다. – tdelaney

+1

다른 생각은 데이터 처리 방법을 고려하는 것입니다. 처리를 위해 xml 데이터를 mongodb와 같은 관계형 데이터베이스 또는 no-SQL db로 분해 할 수 있습니다. 이러한 시스템은 복제를 수행하거나 다른 시스템이 db에 원격으로 액세스 할 수있게합니다. – tdelaney

답변

2

Michael Anderson의 대답에서 언급했듯이 각 시스템에 변경 사항 만 diff로 보낼 수 있습니다.

이렇게하는 방법 중 하나는 git과 같은 프로토콜을 소개하는 것입니다. 자식으로

, 당신은 할 수 :

  1. 는 첫 번째 시스템의 데이터를 생성하고
  2. 이 두 번째 시스템이 변경

이 훨씬 더 될 것 당겨 가지고 개인의 repo에 밀어 매번 데이터의 전체 사본을 가져 오는 것보다 효율적입니다.

암호화 된 채널을 통해 압축됩니다 (자식 서버/서비스에 따라 다름)

+0

이것은 매우 영리한 생각입니다. 또 다른 장점은 오류가 발생할 경우 변경 사항을 롤백하는 데 전체 커밋 내역을 사용할 수 있다는 것입니다. 여전히 몇 가지 동기화 문제가 있습니다. 마스터는 업데이트가 수신되었는지 확실하지 않고 pull 요청을 트리거 할 수 있습니까? 아마도 추가 응용 프로그램 계층 프로토콜을 조정해야 할 것입니다. – mhawke

+0

이 방법으로 복제 된 BIND DNS 클러스터를 설정했습니다. 기본 네임 서버는'git pull '을 수행하고 응답이 "Already Up-date"가 아닌 경우 configs를 재생성하고 영역을 슬레이브 네임 서버로 rsync 한 다음 다시로드합니다. 이 Python 스크립트는 cronjob으로 매 몇 분마다 실행됩니다. –

1

리눅스에 있고 데이터가 이미 파일 시스템의 어딘가에 있다고 가정하면 항목에 간단히 scp 또는 rsync을 입력하는 것이 좋을까요?

송신하기 전에 압축하거나 프로토콜에서 압축을 사용하고 싶을 수도 있습니다.

데이터가 약간만 변경된 경우 전체 데이터 대신 이전 버전 (diff으로 생성)에 대한 패치를 보내고 다른 쪽 끝에서 다시 생성 해보십시오.

+0

'rsync'는 즉석 압축을 수행하는'-z' 옵션을 가지고 있습니다. –

+0

사실,'scp'는'-C'를 가지고 있습니다. 그들은'bzip -9'처럼 항상 좋은 압축을하지는 않지만 대개는 충분합니다. –

+0

'diffxml'도 유용 할 수 있습니다 - http://diffxml.sourceforge.net/ –

관련 문제