요약 :동기화 용 데이터 청킹을위한 잘 알려진 기술이 있습니까? 청크는 별도로 전송되는 데이터 블록으로 간주됩니다.SQLite db - automatic chunking과 웹 서비스의 힌트를 효율적으로 동기화합니까?
이것은 다소 광범위한 질문 일 수 있습니다. 제안 될 때, 나는보다 전문화 된 주제를 시작할 것입니다.
웹 서비스를 통해 액세스하는 중앙 데이터베이스와 안드로이드 타블렛 데이터베이스 (SQLite)를 동기화하기위한 코드를 디자인/작성하려고합니다. 메커니즘은 다음 사실을 반영해야합니다 :
- 응용 프로그램의 범위에 사용됩니다. 응용 프로그램은 다소 단순해야합니다. 어쨌든, 그들은 주로 오프라인에서 작동해야합니다.
- 데이터의 양은 작은 것에서 큰 것까지 (태블릿의 기술적 한계까지) 될 수 있습니다.
- 웹 서비스 구현은 고객에 종속적 일 수 있습니다. 즉, SOAP을 유지하고 REST를 강요하지 않는 역사적인 이유가있을 수 있습니다. 즉, 웹 서비스를 다시 작성할 필요가 없어야합니다.
- 경우에 따라 (고객 사이트에서 동일한 기술을 사용하여) 특정 웹 서비스를 새로 만들 수 있습니다.
질문의 핵심은 동기화하는 동안 이동 된 데이터의 크기를 최소화하는 방법입니다. 질문 은 비동기 다운로드을 구현하는 방법과 관련이 없습니다. (I 버질 Dobjanschi에 의해 Developing Android REST client applications에 제시된 구현 기술을 cosidering입니다.)
지금까지, 나는 (이 아닌 특정 순서) 다음과 같은 기본 방법을 발견했다 : 적은 양의 데이터에 대한
- 무력 즉, 모든 것을 수신/전송하고 대상 측 (업로드시 원격 서버에서 다운로드 할 때 태블릿에서)에서 차이점을 해결합니다. 여기서 (말하자면) 전체 데이터베이스 테이블은 가능한 최대 데이터 덩어리로 볼 수 있습니다.
- 데이터 레코드에 수정 날짜 (타임 스탬프)를 사용하고 마지막 동기화에서 기억 된 날짜를 기반으로 최신 레코드 만 동기화합니다. 추가 및 수정 된 레코드의 경우와 마찬가지로 정상입니다. 그러나 삭제 된 레코드에는 일부 추가 메커니즘을 사용해야합니다. 여기서 단일 레코드는 최소한의 데이터 덩어리로 간주 될 수 있습니다.
위의 내용은 데이터의 단일 청크의 동기화입니다. 보다 현실적인 상황에서는 더 많은 레코드 청킹이 필요합니다. 여기서 나는 청크가 개별적으로 전송 될 수있는 데이터 블록이라고 생각한다. 전송이 실패한 경우 (즉, 다양한 이유로 오프 - 라인 상태 인 경우), 실패한 및 전송되지 않은 청크 만 동기화되어야합니다.
청크가 특정 크기 (데이터 블록을 형성하는 데 약 10 kB)를 가져야한다는 것이 분명한 이유는 무엇입니까?
통신 비용을 줄이려면 구성된 청크 패키지가 청크 레코드 일부가 변경되거나 추가되거나 제거 될 때까지 동일하게 유지되어야합니다. 청크는 중앙 서버 또는 태블릿 장치에서 구성되는지 여부에 관계없이 독립적으로 구성되어야합니다.
다른 청크는 변경된 데이터가 포함 된 청크의 영향을받지 않습니다. 이렇게하면 SHA 다이제스트가 양쪽에서 각각의 청크에 대해 계산 될 수 있으며 청크가 동기화되어야하는지 쉽게 알 수 있습니다.
청크를 결정하는 방법에 대한 표준 기술, 논문, 예제가 있습니까?
덕분에 우리 Rethync SDK 프레임 워크 (오픈 소스)에서