2017-10-16 133 views
6

我正在構建一個Android應用程序,它必須離線工作數週,但可以在遠程數據庫聯機時立即與其同步。Firestore offline cache

我的問題是可以Firestore是一個很好的選擇嗎? Firestore保存其離線緩存多久?

+0

看來如果您需要將大量數據保存到脫機緩存中,則需要使用SQLite或其他本地數據庫或緩存系統同步數據。 – wonsuc

+0

嗨,你可以告訴你如何在firestore中離線插入數據 –

回答

5

可將Firestore配置爲保留用於此類斷開/脫機使用的數據。我建議你閱讀的文檔的enable offline persistence部分,其中包含啓用此功能的這個樣本:

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

你的代碼是一樣的你是否已連接與否,因爲SDK簡單工作原理相同。如果您想檢測數據是否來自緩存(因此可能過時),請閱讀文檔中的Listen to offline data部分。

緩存中的數據在一段時間後不會過期。從緩存中刪除數據的唯一兩個原因:

  1. 數據已從服務器上刪除,在這種情況下,客戶端將從磁盤緩存中刪除它。
  2. 客戶端需要清除其磁盤緩存以騰出空間來存放更新的數據。
+0

對不起,如果我不夠清楚,但我的問題是Firestore保持其離線緩存多久?我已閱讀之前發送的鏈接,其中包含以下內容:「此功能會緩存您的應用正在使用的Cloud Firestore數據副本,因此您的應用可以在設備脫機時訪問數據。」 「積極使用」意味着什麼?如果我在一天或一週後沒有訪問它,它會刪除我的數據嗎?我可以配置它保留我的所有數據,直到我說不? –

+0

沒有明確的緩存過期。它保存數據直到需要爲新數據騰出空間。 –

+1

因此,如果它決定它需要空間,那麼它會刪除我的數據?在它開始刪除我的數據之前它可以存儲多少數據?這對我很重要,因爲我需要一個可靠的本地數據庫。 –

0

如果你聽雲公司的FireStore數據,你會得到緩存數據的即時快照,並且還更新時,您的應用程序能夠在線連接:

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"); 
     } 
    } 
}); 

持久性默認情況下,所以這種行爲啓用不需要任何配置。