gpt4 book ai didi

ios - Cloud Firestore - 循环 getDocument 请求(500 多个文档)性能低下(Swift)

转载 作者:行者123 更新时间:2023-11-28 15:16:48 24 4
gpt4 key购买 nike

我正在编写一个函数,该函数从 API 调用中提取信息,解析生成的 JSON,循环遍历每个结果项,然后在以下 View Controller 上显示此信息。在这个循环中,我必须从我们的 Firestore 数据库中提取每个项目的信息。

我使用的是 Swift 4 和 Firestore 0.8.0

下面的代码是我到目前为止一直在使用的代码,它考虑了我们的数据库中是否存在某个项目,只有当所有 Firestore 请求都已完成时才会发生 segue:

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
}

(代码是使用这个问题编写的 -> Crashes with Firestore ,如果您的集合中不存在文档,目前 Firestore 最初不会返回 nil 值)

我遇到的问题是这个函数最终需要几分钟才能完成。有没有更快的方法来执行这个循环文档请求?这只是测试版性能吗?

我们的 Firestore 集合最终将拥有超过 1,000,000 个文档,并且从每个文档中提取的字段具有嵌套来源,如下所示:

collection {
document {
object {
item1: data to pull
item2: data to pull
...etc
}
}
}

任何帮助将不胜感激!

更新和结论

看来我对此采取了相反的方法!由于我们数据库的性质意味着我们存储 API 数据的所有文档,因此我可以在我们的 Firestore 数据库上执行单个查询以限制数据,然后强制 API 调用仅返回基于初始查询找到的文档的结果。这消除了检查我们的数据库中是否存在任何 API 调用结果文档的需要!简单轻松!

最佳答案

我认为问题在于您对数据库发出了 500 多个单独的提取请求。无论如何,这可能会很慢。

我会想方设法将这些数据放入一个集合中,然后查询该集合以获取您需要的文档。这至少可以让您通过一次调用获取这些数据(或者,如果您不需要同时需要所有 500 个文档,则更好的是获取分页数据)

关于ios - Cloud Firestore - 循环 getDocument 请求(500 多个文档)性能低下(Swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46707914/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com