0

요약 너무 큽니다 : 나는 메모리에 모든 데이터를 저장 및 분리 유지 할 수없는 클라이언트와 데이터의 매우 큰 금액을 동기화하려면 어떻게동기화 데이터 구조 데이터가 클라이언트

?

설명 :

내가 웹에서 일부 데이터를 표시하는 실시간 (아약스/혜성) 응용 프로그램이 있습니다. 저는 이것을 웹의 뷰와 서버의 모델로 생각하고 있습니다.

나는 많은 수의 레코드를 서버에 가지고 있는데, 모든 레코드는 항상 추가/제거/수정된다고합니다. 여기에 문제가 있습니다 :

-이 웹은 클라이언트가 많은 연결/연결 끊기 가능성이 높습니다. 클라이언트 연결이 끊어져있는 동안 데이터가 수정되었을 수 있으며 다시 연결할 때 클라이언트를 업데이트해야 할 수 있습니다. 그러나 데이터가 너무 크기 때문에 클라이언트는 다시 연결될 때마다 모든 데이터를 보낼 수 없습니다.

- 많은 양의 데이터가 있기 때문에 클라이언트는 분명히 모든 데이터를 보낼 수 없습니다. 전세계와 수천 개의 메시지 또는 Google지도가있는 Gmail 계정을 생각해보십시오!

처음에는 데이터의 일부 관련 하위 세트에 대한 전체 스냅 샷이 클라이언트에 전송 된 다음 증분 업데이트 만 전송된다는 것을 알고 있습니다. 이것은 일종의 일련 번호를 통해 수행 될 것입니다. 클라이언트는 "받은 마지막 업데이트가 # 234"라고 말하고 클라이언트는 # 234와 #current 사이의 모든 메시지를 보냅니다.

또한 클라이언트보기는 레코드 100-200을 "표시하므로"(아마 0-300, 전략은 무엇이든) 서버에 알릴 것입니다.

그러나이 모든 것을 직접 코딩하는 아이디어는 싫다. 라이브러리 (또는 적어도 단계별 레시피)가 있어야하는 충분히 일반적이며 공통적 인 문제가 있습니다.

Java 또는 node.js에서이 작업을 수행하려고합니다. 다른 언어로 솔루션을 사용할 수 있다면 기꺼이 전환 할 수 있습니다.

+0

당신이 지정한 모든 비교는 클라이언트에서 전체 데이터 집합을 필요로하지 않으므로 시도조차하지 않습니다. 주어진 시간에 앱이 완전한 데이터 세트를 필요로한다는 요구 사항이 있습니까? 그렇지 않다면 왜 귀찮게합니까? 요청시 관련 * 열람 * 데이터를 보내십시오. – Joe

+0

@Joe, 데이터 구조를 동기화하는 방법이 있지만 링크 할 방법이없는 DWR 라이브러리 [http://directwebremoting.org/dwr/index.html]가 있다고 생각합니다. 보기 (내가 아는 한). – Shahbaz

+0

@Joe, backbone.js 모델을 투명하게 동기화 할 수있는 몇 가지 시도가 있음을 알고 있습니다. 다시 말하지만, 그들은 매우 중요한 문제를 해결하지만 데이터가 클라이언트가 처리하기에는 너무 큰 경우 솔루션이 작동하지 않습니다. 데이터를 결합하는 솔루션을 찾고 있어요 + 데이터의 하위 집합을 실제로 동기화해야하는지에 대한 지식 – Shahbaz

답변

1

펍/서브 솔루션을 사용해보십시오. 주어진 시작 시간에 클라이언트를 서버 이벤트에 등록하십시오. 서버는 발생하는 시간을 기반으로 모든 데이터 변경 이벤트를 기록합니다. 클라이언트가 일정 시간 재 연결되면 클라이언트는 마지막 동기화 이후 변경된 모든 데이터 행의 목록을 요청합니다. 서버의 모든 로직을 유지하고 변경 사항을 동기화 할 수 있습니다. 전형적으로 "select * from table from id (select id from changed_rows where change_date> given_date)"명령문을 서버에서 최적화 할 수 있습니다.

관련 문제