저는 현재 정확히 동일한 요구 사항과 문제로 모바일 / 데스크톱 / 분산 앱을 개발 중입니다.
우선, 이러한 요구 사항은 모바일 앱 자체에 국한된 것이 아니라 연결이 끊어 지거나 분산 된 클라이언트-서버 트랜잭션 (병렬 프로그래밍, 멀티 스레딩, 요점)에 있습니다. 따라서 모바일 앱에서 해결해야 할 일반적인 문제입니다.
일반적으로이 모든 것의 요약은 n 개의 클라이언트에 배포 될 수있는 잠재적 인 데이터 레코드가 있으며 동시에 편집 할 수 있다는 것입니다. 필요한 것은
- 적절한 버전 관리 / 잠금 메커니즘
- 적절한 권한 / 액세스 관리
- 적절한 동기화 / 캐싱 전략
(1)의 경우 일부 패턴을 적용 할 수 있습니다. 자주 사용되는 잠금 전략에는 낙관적 오프라인 잠금 과 비관적 오프라인 잠금의 두 가지가 있습니다 . 이들 중 일부는 레코드가 변경 될 때마다 업데이트되는 모든 데이터 레코드에 대해 카운터 (매우 간단한 "타임 스탬프"정렬)를 사용하는 MVCC ( MultiVersion Concurrency Control) 와 같은 다른 버전 제어 "패턴"에 적용됩니다. .
(2)와 (3)은 (1)과 독립적으로 처리해야하는 매우 광범위한 문제입니다. 내 경험에 대한 조언 :
대부분의 문제를 추상화하는 클라이언트-서버 기술을 사용하십시오. (1) 낙관적 오프라인 잠금 + MVCC를 통해 (2) 웹 API를 통해 (3) Http 캐싱을 통해 잘 처리하는 CouchDb 와 같은 일부 웹 기술을 강력히 권장 합니다.
입증 된 기술과 접근 방식에 의존 할 수있는 경우 직접 발명하지 마십시오. 기존 기술 / 패턴을 연구하고 비교하는 데 시간을 투자하는 것이 자신의 시스템을 구현하는 것보다 훨씬 낫습니다.
가능하면 동종 기술을 사용하십시오. "균질"이란 웹 2.0 사용 시나리오와 같이 동일한 원칙을 염두에두고 구축 된 기술을 의미합니다. 예 : 로컬 캐싱 전략과 함께 적절한 CouchDb 및 REST 클라이언트 (웹 API)를 사용하는 것이 모바일 앱용 SQL을 사용하는 것보다 낫습니다.
MySQL은 그러한 사용 시나리오를 위해 명시 적으로 만들어지지 않은 기술이기 때문에 MySQL 사용을 강력히 권장합니다. 작동하지만 웹 통신 및 동시성 스타일 (예 : 많은 NoSQL 데이터베이스)을 이미 수용하는 데이터베이스 시스템을 사용하는 것이 훨씬 좋습니다.
그건 그렇고, CouchDb API에 대해 작동하는 사용자 정의 로컬 클라이언트와 함께 CouchDb에 정착했습니다 .CouchDb API는 아름답게 작동하고 확장됩니다. 나는 MSQL + (N) Hibernate를 사용하지 않고 처음부터 올바른 선택을하지 못해서 (연구가 충분하지 않음) 높은 가격을 지불했습니다.