【问题标题】:Firebase should server or client do the filteringFirebase 应该由服务器或客户端进行过滤
【发布时间】:2018-02-13 14:47:39
【问题描述】:

我正在使用 Firebase 后端编写一个投票应用程序。用户回答是/否问题并查看结果。除了他们的朋友之外,他们看不到谁回答了这个问题。我的结构:

questions
    question1:
        readable
           text: "Do you enjoy Stack Overflow?"
           yes_count: 76
           no_count: 14
        response:
            user1: yes
            user2: no
            ...
            user1000: no

users:
    user1:
        friends:
            user1
            user999

一种方法是在"response" 节点上调用onChildAdded,并在客户端进行过滤。这可能会导致下载数千个不必要的 UID。另一种方法是要求服务器执行此操作。用户将获取朋友 UID 的请求放在队列中,后端进行过滤并将其放在用户可以收听的位置。但这是一个很大的额外负担,尤其是考虑到每当一个问题有新答案时,后端必须检查该新答案是否来自每个用户的朋友。

问题:是否有可能以这样一种方式查询 Firebase,以仅在 "response" 节点获取朋友的 UID,而不是每个人的。如果不是,是用户进行过滤(并下载数千个不需要的 UID)还是让服务器进行过滤(巨大的额外负载)更好?

【问题讨论】:

    标签: database firebase data-structures firebase-realtime-database


    【解决方案1】:

    一旦你要求友谊是双向的,这就变得微不足道了,所以也要存储反向关系。例如

    friends:
        user1:
            user42
            user999
        user42:
            user1
        user999:
            user1
    

    使用这种双向数据结构,如果用户发帖,您可以简单地使用/friends/$uid 加载他们的朋友列表并循环访问。无需昂贵的查询。

    【讨论】:

    • 嗨弗兰克。我编辑了这个问题,很抱歉造成混乱。我知道如何使用双向数据结构来寻找朋友。我问服务器或客户端应该进行过滤。谢谢!
    • 此数据结构中没有过滤,它是直接查找 ID,然后直接加载 N 次您需要的用户数据。如果您担心后者速度慢,那并没有许多开发人员想象的那么糟糕。见stackoverflow.com/questions/35931526/…
    • 哦,我将直接查找与下载混淆了。一个愚蠢的问题。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多