下载所有数据,在本地过滤或仅下载过滤的数据

时间:2019-06-19 05:24:44

标签: javascript database firebase google-cloud-firestore

我有一个商店Web应用程序React前端,背面是Firebase,Firestore作为数据库。

我有500件商店的商品。我希望只有桌面客户端。

更好的做法是:

  • 在初始加载期间立即将所有项目下载到本地对象数组中,并使用.filter()进行过滤; OR
  • 只要客户端进行过滤,就调用数据库以仅返回过滤后的数据。

要一次下载所有文件,我在想:

  1. 由于每个过滤器都是本地完成的,因此速度更快(也许)。我不确定对象数组的大小比从服务器获得响应要慢。由于客户只会是台式机,因此我考虑的范围很大。
  2. 不需要每个过滤器都与服务器通信。 Firestore还会根据读取,写入或事务的数量来计算配额,因此应该减少配额的使用。
  3. 在同一客户端上重复相同的过滤器,无需再次请求相同的数据。就像在客户端中一样,可能会过滤,然后重置过滤器,然后再次执行相同的过滤器。

我正在考虑仅下载过滤结果,

  1. 在服务器上进行过滤并比本地.filter()更快地做出响应( )。
  2. 客户总是可以获得最新的信息。
  3. 更快的初始加载。

我知道它可能取决于数据库结构,因为Firestore是浅层查询,因此我将数据结构化为尽可能浅,文档中没有子集合。

我只是比较香草的东西,所以后面没有Algolia或Elastic,前面没有搜索或索引库。

1 个答案:

答案 0 :(得分:1)

500是非常少量的文档。现代桌面系统绝对不会对列表进行排序和过滤。您可能会对Cloud Firestore的帐单感到不高兴,因为它使帐单一直排序和过滤所有查询,而不是仅下载一次并在本地完成所有查询的性能。不过,这取决于您希望应用程序用户的行为(以及文档的大小以及他们的连接速度)。

当购买50,000件产品(在低端台式机上)时,您可能会发现一些性能问题,但可能不足以给任何人带来不便。尝试编写几行代码来排序或过滤50,000个随机整数,然后查看需要花费多长时间。您的实际应用程序代码与实际数据的性能应该没有太大不同。

如果您能够在本地缓存文档而不必再次查询所有文档,那么您会做得更好。考虑添加文档字段以进行最后更新,并仅查询自上次查询以来已更新的文档。您将节省更多的金钱和时间。

最后,您应该对用例进行基准测试,以获取一些实用数据。花费更少的时间进行猜测,而花费更多的时间进行测量。