簡體   English   中英

Firebase 實時數據庫多路徑更新與 Firestore 數據庫批量寫入

[英]Firebase realtime database multipath updates vs firestore database batched write

我有一個應用程序,每個集合包含數百萬個文檔。 我的應用程序是使用 Android Java 和 Firestore 數據庫創建的。 問題是 Firestore 的批量寫入最多只能更新 500 個文檔。 如果我需要更新超過 500 個文檔怎么辦? I cannot create multiple batched write just to solve my problem because I am using Android with Java and there's no such thing as Promise or AsyncTask in Java. 因此,創建多個批量寫入不會返回 Promise。 所以我不能保證我的數據與批量寫入的一致性。

我閱讀了有關 Firebase 實時數據庫的多路徑更新的信息,它確實可以解決我的問題,因為它沒有記錄的限制。 但實時數據庫的問題在於它不支持對多個 where 子句的查詢,例如 Firestore 數據庫中的查詢。

在我希望支持多個 where 子句並更新多達數百萬個數據的情況下,我應該使用哪個數據庫?

請幫助我,因為我現在很困惑,如果我的 Firebase 問題無法解決,我計划遷移到 SQL。

您仍然可以創建多個批次並單獨運行每個批次。 Promise.all()基本上同時運行所有這些承諾,但每個批次最后都會返回一個單獨的 promise。 如果您不想在應用程序端處理此問題,則可以使用Cloud Functions並在服務器端運行它,如果出現任何錯誤,您可以根據需要恢復添加的任何文檔。

我閱讀了有關 Firebase 實時數據庫的多路徑更新的信息,它確實可以解決我的問題,因為它沒有記錄的限制

限制記錄在 文檔中。 對於 REST API,每次寫入操作的總數據應小於256 MB ,對於 SDK,應小於16 MB

在我希望支持多個 where 子句並更新多達數百萬個數據的情況下,我應該使用哪個數據庫?

這完全取決於您需要什么查詢。 讀操作比寫操作更頻繁嗎? Firestore 可能是一個更好的選擇,因為它可以支持具有多個約束的查詢,就像您的問題一樣。

I cannot create multiple batched write just to solve my problem because I am using Android with Java and there's no such thing as Promise or AsyncTask in Java.

Java中沒有Promise的概念。 但是, AsyncTask存在,但正如您所見,即使從 API 級別 30 開始也已棄用。

因此,創建多個批量寫入不會返回 Promise。

它不能返回 Promise,它將返回一個任務。 當您調用WriteBatch#commit()時,返回的 object 的類型是Task<Void> 這意味着所有這些操作都在另一個線程中執行,並且主線程不會受到影響。 由於您有一個任務 object,您可以使用addOnCompleteListener()附加一個偵聽器並等待操作完成。 因此,您可以一個接一個地執行批處理,也可以並行執行,因為所有操作都通過單個連接流水線化。

如果您不想使用這種非常簡單的方法,那么您應該考慮使用RxJava 庫

如果您想在 Android 開發方面提高自己的技能,我強烈建議您學習Kotlin 因此,當談到 Kotlin 時,我認為最好的功能之一就是Kotlin Coroutines

對於簡單的 Firestore 讀取,我建議您閱讀以下資源:

在更新數百萬個文檔時,在您的 Android 應用程序代碼中執行此操作聽起來不是一個好的解決方案。 在我看來,您擁有的最佳選擇是將Cloud Functions 用於 Firebase 因此,您將能夠使用多個whereEqualTo()調用創建查詢,並且所有操作都將在服務器上執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM