2017-10-16 38 views
6

Buduję aplikację dla systemu Android, która musi pracować w trybie offline przez kilka tygodni, ale może natychmiast zsynchronizować się ze zdalnym DB, gdy jest on dostępny online.Pamięć podręczna trybu offline w magazynie Firestore

Moje pytanie brzmi, czy Firestore może być dobrym rozwiązaniem? Jak długo Firestore utrzymuje pamięć podręczną trybu offline?

+0

Wydaje się, że jeśli chcesz zapisać ogromne dane w pamięci podręcznej trybu offline, musisz zsynchronizować dane z 'SQLite' lub innym lokalnym systemem db lub cache. – wonsuc

+0

Witam, czy możesz powiedzieć, jak wstawiasz dane offline w sklepie firewall? –

Odpowiedz

5

Magazyn ogniowy można skonfigurować tak, aby utrzymywał dane dla takiego użytkowania w trybie rozłączonym/offline. Polecam zapoznanie się z sekcją enable offline persistence w docs, który zawiera tę próbkę włączeniu tej funkcji:

FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder() 
     .setPersistenceEnabled(true) 
     .build(); 
db.setFirestoreSettings(settings); 

kod będzie taki sam, czy jesteś podłączony czy nie, ponieważ po prostu SDK działa tak samo. Jeśli chcesz wykryć, czy dane pochodzą z pamięci podręcznej (a zatem potencjalnie nieaktualne), przeczytaj sekcję Listen to offline data w dokumentach.

Dane w pamięci podręcznej nie wygasają po upływie określonego czasu. Jedyne dwa powody usunięcia danych z pamięci podręcznej:

  1. Dane zostały usunięte z serwera, w takim przypadku klient usunie je z pamięci podręcznej dysku.
  2. Klient musi wyczyścić pamięć podręczną dysku, aby zwolnić miejsce na nowsze dane.
+0

Przepraszam, jeśli nie byłam wystarczająco jasna, ale moje pytanie brzmiało, jak długo Firestore utrzymuje pamięć podręczną trybu offline? Przeczytałem link, który wcześniej wysłałeś, zawierał on: "Ten składnik buforuje kopię danych z Cloud Firestore, z których Twoja aplikacja aktywnie korzysta, dzięki czemu Twoja aplikacja może uzyskać dostęp do danych, gdy urządzenie jest w trybie offline." Co oznacza "aktywne korzystanie" oznacza dokładnie? Czy usunie moje dane, jeśli nie będę mieć do nich dostępu po upływie dnia lub tygodnia? Czy mogę go skonfigurować, aby przechowywać wszystkie moje dane, dopóki nie odpowiem? –

+0

Brak wyraźnego wygaśnięcia pamięci podręcznej. Przechowuje dane, dopóki nie będzie miejsca na nowe dane. –

+1

Więc jeśli zdecyduje, że potrzebuje miejsca, to usunie moje dane? Ile danych może przechowywać, dopóki nie zacznie usuwać moich danych? Jest to dla mnie ważne, ponieważ potrzebuję niezawodnej lokalnej bazy danych. –

0

Jeśli słuchasz danych w chmurze FireStore, otrzymasz natychmiastowe migawek pamięci podręcznej danych, a także aktualizuje, gdy aplikacja jest w stanie połączyć się z siecią:

final DocumentReference docRef = db.collection("cities").document("SF"); 
docRef.addSnapshotListener(new EventListener<DocumentSnapshot>() { 
    @Override 
    public void onEvent(@Nullable DocumentSnapshot snapshot, 
         @Nullable FirebaseFirestoreException e) { 
     if (e != null) { 
      Log.w(TAG, "Listen failed.", e); 
      return; 
     } 


     // Determine if the data came from the server or from cache 
     String source = snapshot != null && snapshot.getMetadata().hasPendingWrites() 
       ? "Local" : "Server"; 


     // Read the data 
     if (snapshot != null && snapshot.exists()) { 
      Log.d(TAG, source + " data: " + snapshot.getData()); 
     } else { 
      Log.d(TAG, source + " data: null"); 
     } 
    } 
}); 

Trwałość jest domyślnie włączona, więc takie zachowanie nie wymaga żadnej konfiguracji.