2017-04-22 15 views
4

내 사용 사례를 이해할 수 있도록 내가 어디에서 왔는지 자세히 설명하는 것이 중요하다고 생각합니다._replicator 데이터베이스가 확장 가능하지 않거나 디자인에 미세 조정이 필요합니다.

배경 : CouchDB 1에서 2로 내 응용 프로그램을 마이그레이션하려고하는데이 마이그레이션은 상당한 양의 작업을 필요로합니다. 필자는 휠체어를 재발행하지 않고, CouchDB 2가 멋진 기능을 새로 선보인 이후로 내가 더 자세히 설명 할 디자인이 없는지 다시 한번 확인하고 싶다.

학생들이 디지털로 퀴즈 답변을 제출할 수있게 해주는 다음과 같은 간단한 사용 사례를 고려해보십시오. 각 학생은 퀴즈 답을 제출할 수 있어야하며 교사는 모든 답을 볼 수 있어야합니다. 이 디자인은 PouchDB가 PouchDB가 DB에 직접적으로 말하므로 PouchDB와 함께 작업해야합니다. 그렇지 않으면 정교한 API 집합이 작성되어야하기 때문에 많은 시간을 절약 할 수 있습니다.

내가 선택한 디자인은 학생 당 하나의 데이터베이스와 교사 당 하나의 데이터베이스, 즉 사용자 당 데이터베이스로 구성됩니다. 데이터베이스 소유자 만 데이터베이스를 편집 할 수 있으며 이는 CouchDB 역할을 통해 시행됩니다. 학생이 답을 제출하면 PouchDB를 통해 그/그녀의 데이터베이스와 동기화됩니다. 대답은 교사의 데이터베이스에 복제됩니다. 이것은 차례로 학생들이 모든 학생들의 모든 대답을로드 할 수 있도록 앱과 교사의 답변을 빠르게로드 할 수있게 해줍니다. 물론 교사 데이터베이스에는 수업, 퀴즈 등으로 답변을 분류하여 교사가 모든 학생의 답변을 한 번에로드 할 필요가 없다는 견해가 있습니다. 교사 데이터베이스가없는 경우 교사는 모든 학생의 데이터베이스에 액세스해야하며 학생의 모든 데이터베이스와 동기화해야합니다.

얼핏보기에 _replicator 데이터베이스는 학생 데이터베이스의 데이터를 단일 교사 데이터베이스로 복제하는 명백한 방법 인 것처럼 보입니다. 큰 문제는 연속 복제를 사용할 때 파일 핸들과 데이터베이스 연결을 사용한다는 것입니다. 즉, 데이터베이스의 리소스를 매우 빠르게 소모시킬 수 있습니다. 예를 들어, 데이터베이스에 10,000 명의 학생이 있다고 가정하면 복제를 위해 10,000 개의 동시 파일 핸들과 데이터베이스 연결이 필요합니다. 이 10,000 명의 학생 중 100 명이 동시에 앱을 사용한다고해도 별 무리가 없다는 것을 고려하면 이것은 매우 미친 짓입니다.

대신 _db_updates 피드를 수신 한 다음 특정 데이터베이스가 변경된 경우에만 데이터베이스를 복제하는 서비스를 개발했습니다. 이 방법을 사용하면 변경 사항이있을 때 리소스를 소비하는 것에 대해 걱정할뿐입니다. 결과적으로 많은 무료 파일 핸들과 데이터베이스 연결로 끝납니다. 학생들과 교사 양쪽이 데이터베이스 사용자 별 디자인

내가 잠시 CouchDB를 2로 실험했는데 CouchDB를 1

에 있었다으로 _replicator 데이터베이스 자원과 마찬가지로 욕심 것으로 나타납니다 최상의 솔루션입니까 아니면 더 나은 솔루션이 있습니까? 이것이 최상의 솔루션이라면 많은 자원을 소비하지 않는이 데이터를 복제하는 더 좋은 방법이 있습니까?

+0

주로 PouchDB에서 CouchDB로 동기화 하시겠습니까? 또는 로컬 소파를하고 있습니까 <-> 소파가 동기화됩니까? – Flimzy

+0

글쎄, 학생 DB에서 교사 DB 로의 복제는 CouchDB에서 CouchDB로 진행됩니다.모바일 앱과의 동기화는 PouchDB에 대한 CouchDB입니다. – redgeoff

+0

수천 개의 장기 실행 복제가 아닌 couch 작업 또는 유사한 작업으로 Couch-Couch 복제를 수행하는 것이 좋습니다. 그러나 그것이 문제가되는지 알 수있는 유일한 방법은 아마도 그것을 시도하는 것일 것입니다. – Flimzy

답변

0

오픈 소스는 Spiegel인데, 누락 된 부분을 제공하는 솔루션 : 확장 가능한 CouchDB 복제 및 수신 대기 변경. Spiegel은 현재 db-per-user 디자인으로 생산 중에 사용되고 있으며 Quizster에 대한 10,000 개가 넘는 데이터베이스의 복제를 효율적으로 처리하고 있습니다.