如何在Firebase中更快地获取数千个数据?[已关闭]

gstyhher  于 2023-10-22  发布在  其他
关注(0)|答案(2)|浏览(107)

已关闭,此问题需要details or clarity。它目前不接受回答。
**想改善这个问题吗?**通过editing this post添加详细信息并澄清问题。

26天前关闭
Improve this question
我开发了一个应用程序,当用户进入附近时,我会得到一个不断更新的用户列表。当有几个用户(大约少于100个)时,它显示得很快,但当它超过标记时需要时间。
有什么特别的方法可以让我尽快拿到名单吗?它有一堆标准,列表会显示出来,我假设它需要花那么多时间来加载。在这里我可以做些什么来优化时间并快速获得列表?
获取“交友”列表的条件如下:
1.与当前用户不在好友关系中的所有用户的列表
1.两个用户(当前用户和其他用户谁不是朋友)应该在同一地点,他们已经预订了进入
1.一旦他们进入会场,从会场一侧标记为“1”
1.(假设用户可以在同一天去多个场馆)他们应该得到用户列表,其中最后一个条目标记为1

mgdq6dx1

mgdq6dx11#

为了提高性能,最好的方法是将所有与查询相关的数据**放在同一个集合中,在本例中是user集合。
此外,当你不处理重复的条目时,更喜欢使用Map而不是数组,因为它更适合Firebase安全规则和执行查询,所以它会像这样:
user文档示例:

{
    name: "John"
    friends: { 
       "<user-id-abc...>": true,
       "<user-id-def...>": true, 
       // undefined properties will be considered as "not friend"
    },
    venues: {
       lastVenue: "<venue-id-abc...>",
       "<venue-id-abc...>": true,
       "<venue-id-def...>": true,
    }
}

所以我认为查询应该类似于这样:

FirebaseFirestore.instance
   .collection("users")
   .where("friends.${friendId}", isNotEqualTo: true) // not friends
   .where("venues.lastVenue", isEqualTo: lastVenueId) // same last venue
   .get();

或者在Node.js中:

db.collection("users")
    .where(`friends.${friendId}`, "!=", true) // not friends
    .where("venues.lastVenue", "==", lastVenueId) // same last venue
    .get();
vojdkbi0

vojdkbi02#

在Flutter中,您可以使用shared_preferences包持久地存储和检索少量数据。您还可以使用包保存数据在缓存内存中,包括照片!
以下是有关如何使用shared_preferences软件包获取数据并保存数据的分步指南:
1.添加依赖项
首先将shared_preferences包添加到Flutter项目中。您可以通过将以下依赖项添加到pubspec.yaml文件来实现此目的:

dependencies:
  shared_preferences: ^2.0.6 # Use the latest version

添加依赖项后,运行flutter pub get获取它。
1.导入包
在你的Dart代码中,像这样导入shared_preferences包:

import 'package:shared_preferences/shared_preferences.dart';

1.保存数据
要使用shared_preferences保存数据,您需要创建SharedPreferences的示例,然后使用它来存储数据。下面是一个如何保存简单键值对的示例:

Future<void> saveData() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  prefs.setString('key', 'value'); // Replace 'key' and 'value' with your data
}

您可以使用setBoolsetIntsetDouble或其他类似的方法,具体取决于要存储的数据类型。
1.用户数据
要检索保存的数据,可以使用以下代码:

Future<void> fetchData() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  String? data = prefs.getString('key'); // Replace 'key' with your data key
  // Check if data exists before using it
  if (data != null) {
    // Use the retrieved data
    print(data);
  }
}

同样,如果存储的数据类型不同,请使用getBoolgetIntgetDouble或相应的方法。
1.错误处理
记住在使用shared_preferences时处理潜在的异常。例如,如果在初始化或写入存储时出现问题,则应妥善处理这些异常。
1.用法
调用saveData()函数在需要时保存数据,并调用fetchData()检索数据。您可以在响应用户交互时或在应用生命周期中的特定点使用这些功能。

相关问题