首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将某些数据库参考数据存储在节点键中还是作为值存储比较好?

将某些数据库参考数据存储在节点键中还是作为值存储比较好?
EN

Stack Overflow用户
提问于 2019-06-28 01:04:46
回答 1查看 37关注 0票数 0

我有一个时间轴节点,如下图所示。我首先存储用户的uid,该用户跟踪一些发布了帖子的用户。然后,我将posterUID和postID存储在它旁边,用一个':‘分隔信息,这样以后我就可以轻松地获取每个部分了。然后我存储帖子的timeStamp。

代码语言:javascript
复制
"Post_Timeline" : {
    "uid" : {
      "posterUID:postID" : {//example postID value: "post:583190375"
        "timeStamp" : 583190375
      },

我想知道这样做是否更有效(我的意思是更快地获取或获取正确的信息)。也可能是在火源成本方面。(欧洲共同体):

代码语言:javascript
复制
"Post_Timeline" : {
    "uid" : {
      "randomID" : {
        "timeStamp" : 583190375,
        "posterUID" : "JNFSD78436VSFFDSF"
      },

我用来获取的代码:

代码语言:javascript
复制
ref.child("Timeline").child((Auth.auth().currentUser?.uid)!)
            .queryOrdered(byChild: "timeStamp")
            .queryLimited(toLast: 10)
            .observeSingleEvent(of: .value, with: { (snapshot) in

                var i = 0
                for case let rest as DataSnapshot in snapshot.children.reversed() {//.reversed()
                    let keyValue = rest.key
                    let uid = keyValue.split(separator: ":")[0]
                    let postIDDoubleVal = keyValue.split(separator: ":")[2]

                    self.fetchUsersPost(uid: "\(uid)", postID: "post:\(postIDDoubleVal)")

我使用这个时间线来获取当前用户所遵循的用户最近创建的10个帖子。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-28 16:53:33

通常,Firebase结构取决于将要使用的查询类型。IMO通常是最佳做法,将节点密钥与其包含的数据分离--特别是如果节点密钥可能是动态数据,如电子邮件或用户名,将来可能会发生变化。

我将通过举例说明为什么

代码语言:javascript
复制
"posterUID:postID"

可能会很糟。

不用说,显然必须有编码/解码节点密钥的代码,所以这只是额外的代码。

问题1:如果同一个用户将两次帖子发到一个帖子上怎么办?

代码语言:javascript
复制
uid
   posterUID:postID
      timeStamp: 583190375
   posterUID:postID
      timeStamp: 123456789

啊-不能这样做,因为你不能在同一个节点中有重复的键。

问题2:不阅读所有节点并在代码中进行筛选,任何类型的特定帖子查询都无法完成。这可能是大量的数据或大量的冗余。

问题3:从被跟踪的任何用户那里得到所有的帖子都是关于一个特定的帖子。Firebase不支持部分结束字符串查询。

问题4: Post_1234被删除了,现在我需要从"uid“节点中删除对该节点的引用。如果没有读取所有的子节点,这是不可能发生的。

可能会遇到一些其他问题,但如果不了解可能运行的查询的全部范围,就无法解决这些问题。

这似乎是一个更灵活的解决方案。

代码语言:javascript
复制
Post_Timeline
   uid
      randomID
        timeStamp: 583190375,
        posterUID: "JNFSD78436VSFFDSF"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56799882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档