gpt4 book ai didi

ios - Firebase 加载相关数据 iOS

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

快速加载“相关”数据的最佳方式是什么?

通用设置,如果我有一个用户列表,所有用户都存储在 uid 节点下,并且包含一个存储 uid 的 follows 列表,例如:

“用户”:{
“abc123”:{
“电子邮件”:“test@test.com”,
“跟随”:{
“xyz789”:真实
}
},
“xyz789”:{ ... }
}

为一个用户关注的所有用户加载数据的最有效方式是什么?是否最好使用 observeSingleEvent(of: .value) 遍历每个 uid

这是我想出的解决方案,但感觉有些麻烦:

func loadRelated(user: User, completion: @escaping (Bool, [UserObject]) -> ()) {

let ref = Database.database().reference(withPath: "users/" + user.uid + "/follows")
ref.observeSingleEvent(of: .value) { snapshot in

var uids = [String]()
for child in snapshot.children {
let userData = child as! DataSnapshot
uids.append(userData.key)
}

let userRef = Database.database().reference(withPath: "users")
var users = [UserObject]()
var count = 0
uids.forEach { uid in
userRef.child(uid).observeSingleEvent(of: .value) { snapshot in
let user: UserObject(from: snapshot)
users.append(user)
count += 1
if count == uids.count {
completion(true, users)
}
}
}
}
}

我真的不想走反规范化的道路并将每个用户数据存储在顶级用户下。

最佳答案

如果您决定使用实时数据库,最好在您的案例中创建另一个名为 user-follows 的根节点。您可以通过将值设置为 true 在路径 user-follows/$uid/$fid 上创建关注,然后在您的应用上您必须 observeSingleEvent 对于 user-follows/$uid 中的每个快照 key ($fid)。

为了避免必须分别观察每个关注,而不是将值设置为 true,您可以只将您需要的关于用户的数据存储在 user-follows/$uid。但是,例如,用户可能会更改他们的用户名,因此您需要使每个 user-follows 中的数据保持最新。您可以利用 Firebase Cloud Functions 在用户更改信息时维护 user-follows

否则,我建议查看 Firebase Firestore ,其中允许一些嵌套。

关于ios - Firebase 加载相关数据 iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47319263/

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