gpt4 book ai didi

ios - Firebase 观察大型数据库缓慢

转载 作者:搜寻专家 更新时间:2023-11-01 07:05:16 26 4
gpt4 key购买 nike

我正在开发一款根据用户位置显示地点(从 firebase 下载)的应用。

我目前有 5k 个条目,它们会在大约 10 秒内显示。我计划有 80k 个条目,我不希望用户等待那么久。

我做了什么:我创建了一个 Place 类,我在我的 firebase ref 上执行 'observe'(.value) 并且在每个子项上我将每个元素放在 Place 类的一个属性中。然后将place:Place = Place(attributes) id添加到一个array:Place中,直到所有地方都下载完。

self.ref.queryOrderedByKey().observe(.value, with: {(snapshot) in
if snapshot.childrenCount > 0 {
for place in snapshot.children.allObjects as! [DataSnapshot] {

当所有地点都在数组中时,我将地点位置与用户位置进行比较,并对数组进行排序以在表格 View 中按距离显示它们。

我尝试了什么:我也尝试使用 GeoFire,但速度较慢。

数据库的外观(80k 元素):

{
"users": {
"DFkjdhfgYG": {
"id":"DFkjdhfgYG"
,"key2":"value"
,"key3":"value"
,"key4":"value"
,"key5":"value"
,"key6":"value"
,"key7":"value"
,"key8":"value"
,"key9":"value"
,"key10":"value"
,"key11":"value"
,"key12":value
,"key13":value
,"key14":"value"
,"key15":"value"
,"key16":"value"
,"key17":"value"
,"key18":"value"
,"key19":"value"
,"key20":"value"
,"key21":value
,"key22":value
,"key23":value
,"key24":value
,"key25":value
,"key26":"value"
,"key27":value
,"key28":value
,"key29":"value"
},
"BVvfdTRZ": {
"id":"BVvfdTRZ"
,"key2":"value"
,"key3":"value"
,"key4":"value"
,"key5":"value"
,"key6":"value"
,"key7":"value"
,"key8":"value"
,"key9":"value"
,"key10":"value"
,"key11":"value"
,"key12":value
,"key13":value
,"key14":"value"
,"key15":"value"
,"key16":"value"
,"key17":"value"
,"key18":"value"
,"key19":"value"
,"key20":"value"
,"key21":value
,"key22":value
,"key23":value
,"key24":value
,"key25":value
,"key26":"value"
,"key27":value
,"key28":value
,"key29":"value"
}
}
}

现在我不知道该怎么做,我绝对需要使用 Firebase。

你能帮我改进我下载 firebase db 元素的方式,或者告诉我另一种方法,让整个过程更快吗?

谢谢!

最佳答案

您在一个函数中使用 for 循环,该函数被调用的次数与您的数据库路径中的子项的调用次数相同,这使得 for 循环完全无用且过度杀伤,这可能会增加整个过程的额外时间。

您可以做的另一件事是在不同的线程上调用它,并使其成为高于其余代码的最高优先级。以下是执行这两项操作的方法:

func handleFirebase() {
DispatchQueue.global(qos: .userInteractive).async {
self.ref.queryOrderedByKey().observe(.value, with: { (snapshot) in

guard let value = snapshot.value as? String else { return }
let key = snapshot.key

print("KEY: \(key), VALUE: \(value)")

}, withCancel: nil)
}
}

关于ios - Firebase 观察大型数据库缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48460536/

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