APIコールから情報を取得し、結果のJSONを解析し、各結果アイテムをループしてこの情報を表示する関数をコーディングしています次のView Controllerです。このループの中で、Firestoreデータベースから各項目の情報を取得する必要があります。Cloud Firestore - ループされたgetDocumentリクエスト(500以上のドキュメント)で遅いパフォーマンス(Swift)
私は& Firestore 0.8.0
次のコードは、私はAで、アイテムは私達のデータベースに存在しない可能性がある場合を考慮に入れており、これまで使ってきたものですスウィフト4を使用しています( - >Crashes with Firestore、文書はあなたのコレクションに存在しない場合はそれによって現在Firestoreが最初の値nilを返しませんコードは、この質問を使用して書かれていた)
for item in results {
dispatch.enter()
//Main loop code for processing the API Call & pulling the document ID for this item
let docRef = db.collection("collection").document(documentID)
docRef.getDocument { (document, error) in
if (document?.exists ?? false), error == nil {
if let document = document {
let data = document.data()
print("EXISTS")
//do things
dispatch.leave()
} else {
print("Document does not exist")
dispatch.leave()
}
} else {
print("DOES NOT EXIST")
//do other things
dispatch.leave()
}
}
}
dispatch.notify(queue: .main) {
//perform a segue to the data display VC
}
を:すべてのFirestore要求が完了したときにのみ発生セグエ
問題は、この機能が完了するまでに数分かかるということです。このループされたドキュメント要求をより速く実行する方法はありますか?これは単なるベータ版ですか?
当社Firestoreコレクションは、最終的には1,000,000以上のドキュメントを持つことになり、次のように各文書から引き出されるフィールドは、ネストされた起源である:
collection {
document {
object {
item1: data to pull
item2: data to pull
...etc
}
}
}
任意の助けをいただければ幸いです!私はこれとは逆のアプローチを取っていたよう
UPDATE &結論
はですね!データベースの性質上、APIデータのすべてのドキュメントを保存するという意味でFirestoreデータベースに対して単一のクエリを実行してデータを制限してから、最初のクエリで見つかったドキュメントのみに基づいて結果を返すようにします。これにより、APIコール結果ドキュメントがデータベースに存在するかどうかを確認する必要がなくなります。イージーピーシー!
コレクション全体を読み込むことはできません一度に1つのドキュメントをループして読み込むのではなく、 –
@MorganChen getDocumentsを参照している場合は、ユーザーのデバイス上でパフォーマンスが非常に重くなります。彼らは50kbサイズのドキュメントを1,000,000枚読み込んで、それぞれのドキュメントから約5kbのデータを約500〜1,000件のデータで表示することがあります。 – Hendies
私は誤解を招くかもしれませんが、クエリを限定してロードすることはできませんすべて1000000を読み込むのではなく、500-1000結果? –