以正确的方式从实时数据库中检索大量数据

Posted

技术标签:

【中文标题】以正确的方式从实时数据库中检索大量数据【英文标题】:Retrieving large number of Data from realtime database in correct arrange 【发布时间】:2021-10-06 17:21:06 【问题描述】:

在我的数据库中,我有大量的项目,不可能一次检索所有这些项目

例如,我有 **Users list ** 其中包含 2000 个用户

这样:

用户:

1-
    email:"user1@gmail.com"
2-
    email:"users2@gmail.com"
3-
    email:"user3@gmail.com"
4- 
    email:"user4@gmail.com"
5-
    email:"user5@gmail.com"
6-
    email:"user6@gmail.com"

*more users*...

2000:
    email:"user2000@gmail.com"

在我的应用程序中,我想检索最后 20 个,然后再检索最后 20 个,然后再检索 20 个,依此类推...

当我与limit_to_last(10) 一起工作时 然后使用mylist.add(0 , users)

它以正确的排列方式(降序方式)检索最后 10 个项目,并且项目出现在列表中,从最后一个项目开始,然后是之前的一个,然后像这样

2000
1999
1998
1997
1996
1995
1994
1993
1992
1991
1990

而这个安排正是我想要的。

当我想检索更多项目时,我的问题就开始了...... 我知道如何检索更多,但我不知道如何正确排列它们 当我加载更多项目时,它看起来像那样没有排列

2000
1999
1998
1997
1996
1995
1994
1993
1992
1991
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990

这意味着第一次加载的项目以降序排列,但第二次加载的项目以升序排列,这是我不想要的。

如何让所有项目都以相同的方式排列(降序方式)

谁能帮忙,拜托。

【问题讨论】:

2000 什么都不是。最好立即检索它们。 现在,这没什么,但将来可能会达到 50k 或更多...我想知道一种有用的方法,用于以正确的排列方式检索数据 请编辑您的问题,以显示我们任何人都可以运行以重现问题的最少完整代码。没有它,就很难说你哪里出错了。我也推荐阅读how to create a minimal, complete, verifiable example。 【参考方案1】:

如果您设法在每个用户的节点中存储一些增量值(负数),那么您也许可以按降序对它们进行排序并对结果进行分页。例如,让我们拿这个数据:

1-
    email:"user1@gmail.com"
    userInt: -1
2-
    email:"users2@gmail.com"
    userInt: -2
3-
    email:"user3@gmail.com"
    userInt: -3
4- 
    email:"user4@gmail.com"
    userInt: -4

请注意,您必须确保此值的大小始终在增加,并且对于每个用户而言不应相同。

之后,您可以使用 orderByChild("userInt")limitToFirst(2) 的查询来获取最新的 2 个用户。 对于后续查询,即您需要获取接下来的 2 个最新用户,您可以添加 startAfter('lastUserInt'),在这种情况下,lastUserInt 将为 -3。 由于数字为负数,并且 Firebase 结果为最新用户,因此将首先获取。

Query latestUsers = databaseReference.child("Users")
        .orderByChild("userInt")
        .startAfter(-3) // lastUserInt
        .limitToLast(2)

【讨论】:

以上是关于以正确的方式从实时数据库中检索大量数据的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Firebase 实时数据库中检索特定数据?

无法从从 Firebase 实时数据库中检索数据以在以下代码行中使用它的方法中获取返回值 [重复]

这是从 Firebase 检索数据的正确方法吗?

为啥我的数据没有在 Flutter for web 中使用 api 从实时数据库中检索

大数据如何做验证数据正确性

从firebase实时数据库IOS Swift中检索数据