【问题标题】:Optimize Firebase query cost?优化 Firebase 查询成本?
【发布时间】:2020-07-18 08:21:24
【问题描述】:

我需要对 Firebase 查询成本进行一些说明,并且我有如下 JSON 格式的用户节点(格式不正确)

"User": {
    "user1": {
        "filter1": "...",
        "filter2": "...",
        "filter3": "...",
        "filter4": "..."
    },
    "user2": {
        "filter1": "...",
        "filter2": "...",
        "filter3": "...",
        "filter4": "..."
    },
    "userN": {
        "filter1": "...",
        "filter2": "...",
        "filter3": "...",
        "filter4": "..."
    }
}

现在,查询是

方法 1

Userref.orderByChild("filter1").equalsTo("string").addListenerForSingleValueEvent;

此查询仅返回 filter1 值为“字符串”的数据(如果我没记错的话)。 例如,在 100 个用户中,如果 firebase 查询仅匹配 5 个,则查询仅返回 5 个用户。

但是我需要更多的过滤器,但是根据官方文档,多个过滤器是不可能的。

为此, 方法 2 我用过

Userref.addListenerForSingleValueEvent();

这将返回所有 100 个用户数据。 以及在客户端设置的所有过滤器。

现在的问题是 在第一种方法中,查询仅返回 5 个用户,并且, 在第二种方法中查询返回 100 个用户,

那么它的基于查询的成本计算可以改变吗?如果没有。的用户达到 100 000,那么两种方法的数据返回时间(加载时间)会相同还是不同?

【问题讨论】:

    标签: java android firebase firebase-realtime-database


    【解决方案1】:

    此查询仅返回 filter1 值为“字符串”的数据(如果我没记错的话)。

    你没有错,你实际上是对的。

    例如,在 100 个用户中,如果 firebase 查询仅匹配 5 个,则查询仅返回 5 个用户。

    是的,这就是使用查询来过滤结果。

    但是我需要更多的过滤器,但是根据官方文档是不可能有多个过滤器的。

    这也是正确的,因为您无法添加多个:

    .orderByChild("filterX").equalsTo("string")`
    

    调用查询。但是,有一种解决方法可以帮助您解决此问题,为此,请尝试我在以下帖子中的回答:

    How to sort Firebase records by two fields (Android)

    现在的问题是,第一种方法查询仅返回 5 个用户,而第二种方法查询返回 100 个用户

    是的,这是正确的,因为当您不使用查询过滤结果时,您会将所有子节点都放在一个节点下。在客户端获取所有数据并过滤结果,这不是一种选择,因为下载整个节点被认为是浪费带宽和资源。

    用户数达到10万,则两种方式的数据返回时间(加载时间)相同或不同

    下载如此大量的数据,这不是一个选择。如果上述解决方案不能帮助您解决问题,您可以尝试使用 Cloud Firestore,chaining multiple whereEquals() 可以正常工作。

    【讨论】:

    • 完全满意,但是两种方法之间的成本影响呢???
    • 使用第二种方案下载整个节点会更有表现力。您应该始终只获得您需要的数据。
    猜你喜欢
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 2015-09-25
    • 2012-06-15
    • 2011-01-19
    相关资源
    最近更新 更多