2012-10-29 4 views
8

오랜 시간 (여러 시간) 네트워크와 연결이 끊어지는 Meteor 프레임 워크를 사용하여 응용 프로그램을 만드는 데 관심이 있습니다. 유성 (meteor)은 로컬 데이터를 미니 몽고 구조의 RAM에 저장한다고 믿습니다 (js 구조). 사용자가 브라우저를 닫거나 페이지를 새로 고치면 모든 로컬 변경 사항이 손실됩니다. 로컬 변경 사항이 디스크에 지속되는 것이 좋을 것입니다 (localStorage? indexedDB?). 메테오가 곧 올거야?연결이 끊긴 유성 응용 프로그램

관련 질문 ... Meteor가 문서 충돌을 어떻게 처리합니까? 즉, 2 명의 사용자가 동일한 MongoDB JSON 문서를 편집하는 경우 해당 충돌은 어떻게 해결됩니까? 낙관적 인 잠금?

답변

4

충돌 해결은 "최종 작성자가 이기기"입니다.

보다 구체적으로, 클라이언트의 각 MongoDB 삽입/업데이트/제거 작업은 RPC에 매핑됩니다. 주어진 클라이언트의 RPC는 항상 순서대로 재생됩니다. 다른 클라이언트의 RPC는 특별한 주문 보증없이 서버에서 인터리브됩니다.

연결이 끊긴 상태에서 클라이언트가 RPC를 실행하려고하면 클라이언트가 다시 연결될 때까지 대기 한 다음 순서대로 서버에 재생합니다. 여러 클라이언트가 오프라인 RPC를 실행 중일 때 서버에서 마침내 실행되는 순서는 각 클라이언트가 다시 연결될 때 정확히 의존합니다.

MongoDB의 $inc$addToSet과 같은 일부 오프라인 변이에 대해이 모델은 매우 잘 작동합니다. 그러나 $set과 같은 많은 공통 수식어는 긴 연결이 끊어 질 때 매우 잘 작동하지 않습니다. 그 이유는이 변이가 다른 클라이언트의 변경 내용과 충돌하기 때문입니다.

"오프라인"앱을 만드는 것이 로컬 데이터베이스를 유지하는 것 이상입니다. 또한 일부 유형의 충돌 해결을 구현하는 RPC를 정의해야합니다. 결국 우리는 다양한 해결 방법을 구현하는 턴키 패키지를 갖기를 희망합니다.

+0

meteor가 OT를 번들 (예 : sharejs)로 추가 할 수있는 경우보다 나은 방법으로 충돌을 해결할 수 있습니다. – TiansHUo

+0

2 부에 대한 답변을 고맙게 생각합니다 .. 무선/가난한 사람이없는 엑스포에서 이름/이메일 수집을위한 태블릿 앱의 사용 사례는 어떻습니까? 어떤 경우에는 컬렉션에만 삽입됩니까? 어떻게 로컬 저장 장치에 보관할 것입니까, 아니면 필요가 있을까요? –

관련 문제