2013-10-27 3 views
0

TouchDB-iOS를 사용하여 우리는 클라우드 CouchDB 서버에 복제하는 로컬 CouchDB 문서 저장소가있는 iOS 앱을 가지고 있습니다. 우리는이 응용 프로그램을 실행하는 사용자가 몇 명있어 TouchDB 데이터베이스 복제본이 많이 있습니다.두 CouchDB 디자인 간을 옮기기

우리가 앱으로 시작했을 때 우리는 CouchDB를 처음 접했을뿐입니다. A 유형의 문서에 B 유형의 문서 인 쉼표로 구분 된 ID 목록을 설명하는 문자열이 표시되도록 관계를 설계했습니다.

따라서 Employee/Employer 예제를 사용하면 Employer에는 employeeIds이라는 속성이 있으며 "1,7,8,10"이됩니다. 직원 10이 종료하면이 목록은 "1,7,8"로 업데이트됩니다.

다른 앱에서 다른 전화를 사용할 때 직원 7이 목록을 종료하고 '1,8,10'으로 업데이트되어 복제시 충돌을 일으킨다 고 가정합니다.

employerIdEmployee 문서 속성에 더 좋은 아이디어라고 생각합니다. 직원이 그만두면 그의 employerId을 비워두기 만하면됩니다. 그런 갈등이 훨씬 적을 것입니다. 그렇죠?

지금 제가 직면 한 문제는 여러 개의 응용 프로그램을 가지고있는 것입니다. 첫 번째 디자인에서 두 번째 디자인으로 모든 CouchDB 데이터베이스를 마이그레이션하는 방법은 무엇입니까?

기존 앱을 모두 폐기해야합니까, 아니면 기존 앱을 손상시키지 않고 충돌을 최소화하면서 모든 앱을 새로운 디자인으로 이전 할 수 있습니까? 이 사건을 어떻게 처리해야합니까? 귀하의 응용 프로그램은, 당신은 단순히 "새로운 스타일"문서 "이전 스타일"로 작동하도록 뷰를 업데이트 할 수 있습니다 (뷰를 통해) 데이터베이스에 쿼리를 수행하는 경우

:

+0

클라이언트를 제어합니까? 사용자가 주어진 시간 내에 업그레이드하도록 할 수 있습니까? –

+0

네,하지만 최후의 수단으로 그걸 지키고 싶습니다. –

답변

0

은 기본적으로 두 가지 시나리오가 있습니다 같이. 그런 다음 백그라운드에서 문서를 업데이트 할 수 있습니다 (예 : _changes feed). 그러면 구식 문서에 대한 지원이 다시 제거됩니다.

앱이 앱의 구조를 사용하는 경우 앱을 업데이트 할 방법이 없을 것입니다. 그렇지 않으면, 그 이전 및 새 스타일 문서간에 변환 사이에 일부 프록시가 필요 거라고 예를 들어 이전 및 새로운 스타일의 문서를 처리하도록 응용 프로그램을 업데이트 물론 당신은 할 수

CouchDB with new-style docs <-- proxy application --> apps with old-style docs 

, 당신이 할 수 있도록 점차적으로 문서를 전환하십시오.

CouchDB에 대한 액세스를 다시 설계해야 할 경우 update handlers을 사용하면 이후 변경 사항을보다 투명하게 처리 할 수 ​​있습니다.