4

현재 Firebase Firestore를 다양한 소스에서 데이터를 검색하는 기본 백엔드로 사용하고 있습니다. 내 모바일 백엔드 용 Android Room을 사용합니다. 전화가 데이터를 수신 할 때 사용자는 며칠 동안 다시 온라인 상태가되지 않는 경우 회의실 데이터베이스에 저장됩니다.Firestore는 오프라인 지속성 메커니즘으로 얼마나 신뢰할 수 있습니까?

장치 파일을 살펴본 후 firestore는 /data/data/<your-app>/databases 디렉토리 아래의 파일에 데이터를 저장합니다.

enter image description here

파일이 나는 경우 FireStore에 오프라인 지속성 문서를 읽고 enter image description here

같은 것을보고 데이터가 캐시에 저장되는 것을 어떻게 내구성 오프라인 지속성이 그것은 언급에 아무런 표시가 없습니다 하지만 얼마나 오래. 제 질문은 Firestore의 오프라인 지속성이 얼마나 오래 지속되는지입니다. 오랜 기간 (일, 주)에 동기화되지 않는 데이터를 저장하기위한 본격적인 로컬 DB 대신에 사용하는 것이 좋습니다.

일단 연결이 다시 설정되면 데이터 동기화를 이미 처리 한 것 같습니다. 어떤 점 이후에는 파일이 시스템에 의해 삭제 될 수 있고 사용자는 모든 것을 잃어 버릴까 봐 걱정했습니다.

답변

3

Android에서는 (이 글을 쓰는 시점에서) Firestore는 SQLite를 지속성 메커니즘으로 사용합니다. 따라서 간헐적 인 오프라인 활동의 경우 성능이나 내구성에 문제가 없어야합니다. 클라우드 경우 FireStore가 사용하기위한 것입니다 때문에

성능

: 그러나 당신이 (당신이 말한대로) 당신이 알아야 할 몇 가지가 있습니다 일 또는 몇 주 동안 오프라인 위하여려고하는 경우에

대부분 온라인 상태이며 아직 서버에 동기화되지 않은 보류중인 쓰기가 대기열에 보관됩니다. 문제를 해결하기 위해 온라인 상태가 아닌 많은 보류중인 쓰기 작업을 수행하면 해당 대기열이 커지고 전체 읽기/쓰기 성능이 저하됩니다. Cloud Firestore의 성능 보장은 대부분 백엔드에서 인덱싱 및 복제를 통해 이루어 지지만 대부분의 최적화는 오프라인에서만 작동 할 때 존재하지 않습니다.

충돌

경우 FireStore의 기본 갈등 해결 모델은 "마지막 쓰기 승리"입니다. 따라서 많은 오프라인 클라이언트가 동일한 문서에 글을 쓰는 경우 마지막으로 온라인 상태가 된 문서 만 실제로 "이기고"변경 내용을 유지합니다.거래 :

이 경우 FireStore의 기능의 대부분은 한 가지 중요한 예외 오프라인으로 작업 특징. 거래는 온라인 상태에서만 실행할 수 있습니다. 따라서 앱에서 트랜잭션을 사용하는 경우 특별한 처리없이 오프라인에서 제대로 작동하지 않습니다.

+0

응답 해 주셔서 감사합니다. 오프라인에서 작동하지 않는 트랜잭션 요소와 충돌 해결 방법을 알지 못했습니다. – martinomburajr

1

예측할 수 없기 때문에 오프라인 지속성이 얼마나 내구성이 있는지에 대한 오프라인 문서가 없습니다. 이 질문에는 4 주 또는 이와 비슷한 질문에 대한 정확한 대답이 없습니다. 오프라인 상태에서 쓰기 작업이 몇 번 수행되는지에 따라 달라지기 때문입니다.

Firestore를 오프라인 전용 데이터베이스로 사용하지 말 것을 권장합니다. 연결이 끊어지기까지의 단기간에서 중간간 동안 작동 할 수있는 온라인 실시간 데이터베이스로 설계되었습니다.

오프라인 상태에서는 모든 쓰기 작업의 큐가 유지됩니다. 대기열이 커지면 로컬 작업 및 응용 프로그램 시작 속도가 느려집니다. 그러나 장치를 다시 시작한 경우에도 이러한 작업이 지속됨을 알아야합니다. 너는 어떤 자료도 잃지 않을 것이다.

+0

예, 감사합니다. 영속성을 위해 Android의 Room 데이터베이스를 사용하기로 결정했으며이 두 가지를 동기화하는 방법을 찾습니다! – martinomburajr