2017-12-20 2 views
0

누구나 네트워크 연결이 끊어져 다시 구축 될 경우 서버에서 다운로드 할 데이터를 정확히 모르는 firebase 모바일 클라이언트에 대한 지식을 공유 할 수 있습니까? firebase 클라이언트는 동기화 할 데이터를 어떻게 알 수 있습니까?

가의 그런 말을하자
  • 키 키 1과 KEY3을 사용하여 데이터베이스에있는 개체가 있었다.
  • 모바일 클라이언트가 클라이언트를 다운로드하여 오프라인 상태가되었습니다.
  • 그 사이에 key2와 key4가 추가되었습니다.
  • 클라이언트는 연결을 복원하고 key2와 key4를 어떻게 든받습니다.

무엇이 변경되었는지 정확히 알 수 있습니까?

  • 전체 컬렉션을 다시 다운로드합니까?
  • 어떻게 든 실종 된 것을 비교하기 위해 모든 객체의 키를 교환합니까?
  • 서버가 어떤 클라이언트에 무엇이 있는지 기억하나요?
  • 다른 건 없나요?
+0

* 다운로드 할 수 있습니까? 즉 노드를 한 번 관찰 (observeSingleEvent)하여 '다운로드'하면 클라이언트는 온라인 상태였던 경우에도 변경 사항을 알 수 없습니다. 마찬가지로 삭제를 위해 노드를보고 있고 두 명의 자녀가 추가 된 경우 다시 온라인에 있더라도 알림을받지 못합니다. – Jay

답변

1

서버는 각 클라이언트의 활성 수신기를 추적하지만 각 클라이언트가 알고있는 것을 추적하지 않습니다.

대신 로컬 캐시에있는 위치에 수신기를 연결하면 클라이언트가 캐시 데이터의 모든 분기에 대한 복합 해시 키를 계산합니다. 서버에 해시를 보내면 실제 데이터에서 동일한 해싱을 수행합니다. 해시 중 하나가 다른 경우 데이터가 수정되어 서버에서 클라이언트로 다시 전송됩니다.


참고이 해시/교환은 당신이 캐시와 리스너를 부착 한 데이터를 발생하는 것이다. 청취하지 않는 캐시 된 데이터는이 치료를받지 못합니다. 일반적으로 앱의 수명주기 동안 데이터의 다른 부분에 리스너를 추가하기 때문에 해시 및 동기화 비용은 앱 수명 기간에 걸쳐 분산됩니다. 더 적은 자비로운 행동을 보았던 유일한 경우는 개발자가 데이터베이스의 루트에 keepSynced(true)을 호출 한 곳입니다. 앱의 시작시 본질적으로 "거대한 동기화"를 강제합니다. 이 시나리오에서 로컬 캐시와 동기화의 해싱은 중요하지 않은 시간, 메모리 및 대역폭을 사용할 수 있습니다.

관련 문제