2017-10-16 16 views
6

Tôi đang xây dựng một ứng dụng Android phải hoạt động ngoại tuyến trong nhiều tuần, nhưng có thể đồng bộ hóa ngay lập tức với một DB từ xa khi nó trực tuyến.Firestore bộ nhớ cache ngoại tuyến

Câu hỏi của tôi là Firestore có thể là một lựa chọn tốt cho việc này không? Firestore lưu giữ bộ nhớ cache ngoại tuyến trong bao lâu?

+0

Dường như nếu bạn cần lưu dữ liệu khổng lồ vào bộ nhớ cache ngoại tuyến, bạn cần phải đồng bộ hóa dữ liệu với 'SQLite' hoặc hệ thống lưu trữ cục bộ hoặc bộ nhớ đệm cục bộ khác. – wonsuc

+0

Xin chào, bạn có thể vui lòng cho biết cách bạn chèn dữ liệu vào chế độ ẩn trong firestore –

Trả lời

5

Firestore có thể được định cấu hình để lưu dữ liệu liên tục cho việc sử dụng bị ngắt kết nối/ngoại tuyến đó. Tôi khuyên bạn nên đọc phần enable offline persistence trong các tài liệu, trong đó có mẫu này tạo điều kiện cho tính năng này:

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

Bạn mã sẽ là như nhau cho dù bạn đã kết nối hay không, kể từ khi SDK đơn giản hoạt động tương tự. Nếu bạn muốn phát hiện xem dữ liệu có đến từ bộ nhớ cache (và do đó có khả năng cũ), hãy đọc phần Listen to offline data trong tài liệu.

Dữ liệu trong bộ nhớ cache không hết hạn sau một khoảng thời gian nhất định. Hai dữ liệu lý do duy nhất được xóa khỏi bộ nhớ cache:

  1. Dữ liệu đã bị xóa khỏi máy chủ, trong trường hợp đó, khách hàng sẽ xóa dữ liệu khỏi bộ nhớ cache trên đĩa.
  2. Máy khách cần dọn dẹp bộ nhớ cache trên đĩa để tạo không gian cho dữ liệu gần đây hơn.
+0

Xin lỗi nếu tôi không đủ rõ ràng, nhưng câu hỏi của tôi là Firestore giữ bộ nhớ cache ngoại tuyến trong bao lâu? Tôi đã đọc liên kết mà bạn đã gửi trước đây, nó chứa thông tin này: "Tính năng này lưu trữ một bản sao dữ liệu Cloud Firestore mà ứng dụng của bạn đang sử dụng, vì vậy ứng dụng của bạn có thể truy cập dữ liệu khi thiết bị ngoại tuyến". "Sử dụng tích cực" có nghĩa là gì? Nó sẽ xóa dữ liệu của tôi nếu tôi không truy cập dữ liệu sau một ngày hay một tuần? Tôi có thể cấu hình nó để giữ tất cả dữ liệu của mình cho đến khi tôi nói không? –

+0

Không có bộ nhớ cache hết hạn rõ ràng. Nó giữ dữ liệu cho đến khi nó cần tạo không gian cho dữ liệu mới hơn. –

+1

Vì vậy, nếu nó quyết định nó cần không gian, sau đó nó sẽ xóa dữ liệu của tôi? Có bao nhiêu dữ liệu có thể lưu trữ cho đến khi nó bắt đầu xóa dữ liệu của tôi? Điều quan trọng với tôi là tôi cần một cơ sở dữ liệu địa phương đáng tin cậy. –

0

Nếu bạn lắng nghe dữ liệu trong đám mây FireStore, bạn sẽ nhận được những bức ảnh ngay lập tức các dữ liệu lưu trữ và cũng cập nhật khi ứng dụng của bạn có thể kết nối trực tuyến:

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

Persistence được kích hoạt theo mặc định để hành vi này không yêu cầu bất kỳ cấu hình nào.

Các vấn đề liên quan