2008-11-07 4 views
36

내 요구 사항은 서버 J2EE 웹 응용 프로그램 및 클라이언트 J2EE 웹 응용 프로그램입니다. 경우에 따라 클라이언트가 오프라인 상태가 될 수 있습니다. 클라이언트가 온라인 상태가되면 변경 사항을 앞뒤로 동기화 할 수 있어야합니다. 또한 일부 필터/규칙을 기반으로 동기화해야하는 행/테이블을 제어 할 수 있어야합니다. 거기에 기존 Java 프레임 워크가 있습니까? 스스로 구현해야하는 경우 제안 할 수있는 다양한 전략은 무엇입니까?오프라인/온라인 데이터 동기화를위한 전략

내 마음에 하나의 솔루션은 SQL 로그를 유지 관리하고 동기화 중에 상대방에서 동일한 명령문을 실행하는 것입니다. 이 전략에 문제가 있습니까?

답변

26

데이터 동기화/복제를위한 많은 Java 라이브러리가 있습니다. 내가 알고있는 두 가지는 daffodilSymmetricDS입니다. 이전의 삶에서 나는 어리석게도 (자바에서) 내 자신의 데이터 복제 프로세스를 구현했습니다. 그것은 상당히 직설적이어야하는 일종의 것처럼 보이지만, 데이터가 여러 장소에서 동시에 업데이트 될 수 있다면, 그것은 지옥으로 복잡합니다. 앞서 언급 한 프로젝트 중 하나를 사용하여이 복잡성을 직접 처리하지 않고 직접 시도하는 것이 좋습니다.

15

동기화와 관련하여 더 큰 문제는 사용자가 오프라인에서 편집 할 때 발생하며 동시에 온라인으로 편집됩니다. 변경된 두 가지 데이터를 병합하거나 사용자가 올바른 버전을 말할 수 있도록 UI를 처리해야합니다. 동시에 편집 할 가능성을 제거하면이 끈적 거리는 문제를 해결할 필요가 없습니다.

일반적으로이 메서드는 모든 테이블에 'modified'필드를 추가하고 지정된 행의 지정된 레코드에 대한 클라이언트의 수정 된 필드를 서버의 수정 날짜와 비교합니다. 일치하지 않으면 서버의 데이터를 바꿉니다.

자동 생성 된 키에주의하십시오. 클라이언트에서 서버로 복사 할 때 데이터 무결성을 유지해야합니다. 엄밀히 말하면 서버에서 SQL 문을 다시 실행하면 자동 생성 된 키가 변경되어 갑자기 외래 키가 의도 한 것보다 다른 레코드를 가리킬 수 있습니다.

종종 다른 소스에서 데이터를 가져올 때 자신의 개인 기본 키뿐만 아니라 외부 소스의 기본 키도 추적합니다. 이로 인해 어려운 동기화 상황에서 데이터 세트 간의 변경 사항과 차이점을 쉽게 결정할 수 있습니다.

+3

내가이 문제를 너무 많이 단순화 한 것으로 생각하여 (미안) 투표했습니다. 보안이나 선택적인 동기화는 다루지 않습니다. Stettler의 논문은 이슈에 대한 좋은 소개입니다 (http://www.ifi.uzh.ch/archive/mastertheses/DA_Arbeiten_2003/Stettler_Christian.pdf) –

+0

감사합니다. 햄릿의 링크는 훌륭한 참고라고 생각합니다. Kieveli가 대답 한 핵심 포인트는 30 초의 독서를하는 입문서에 충분합니다. –

3

동기화 기는 데이터가 업데이트 될시기와 잠재적 인 충돌을 중재해야하는 경우를 식별해야합니다. 나는 paper that explains how to do this using logging and algebraic laws를 썼다.

+2

이 문제에 대한 Christian Stettler의 석사 학위 논문도 있습니다. http://www.ifi.uzh.ch/archive/mastertheses/DA_Arbeiten_2003/Stettler_Christian.pdf 해결해야 할 큰 보안 문제가 있으며이 백서는 다음과 같은 내용을 다룹니다. 그들 멋지게. –

+3

@Jen S. 더 이상 액세스 할 수없는 링크 – Gohan

+1

Wayback Machine 사본이 있습니다 : https://web.archive.org/web/20101126093308/http://www.ifi.uzh.ch/archive/mastertheses/DA_Arbeiten_2003/Stettler_Christian .pdf –

0

응용 프로그램의 클라이언트 측 데이터 저장소로 가장 적합한 것은 무엇입니까? SQLite, 메시지 대기열 또는 일부 객체 저장소와 같은 내장 데이터베이스 또는 웹 데이터베이스 또는 IndexedDB을 사용하여 클라이언트에 저장된 파일/문서 (HTML 응용 프로그램의 경우 LocalStorage API)를 선택할 수 있습니다 .

Gold Rush: Mobile Transaction Middleware with Java-Object Replication을 확인하십시오. 간혹 연결된 시스템에 대한 Microsoft의 설명서에는 서비스 지향적이거나 메시지 지향적이며 데이터 지향적 인 두 가지 접근 방식이 설명되어 있습니다. Gold Rush는 초기 접근 방식을 취합니다. 이후의 방법은 데이터베이스 병합 복제를 사용합니다.