0

我试图弄清楚如何减少对相对静态的 Firestore 集合的读取。

我的数据结构的基础知识:

  • 用户/{userId}
  • 组织/{organisationId}/employees/{employeeId}

每个用户将属于一个组织。用户和员工之间没有参照联系,但是随着更多用户加入组织,可以假设员工文档的数量大致等于该组织中的用户数量。

员工的集合不会经常更改,但在特殊的日子里,可能会收到 100 次写入。

当用户打开应用程序时,我们将获取与其组织关联的员工集合。

我面临的问题是,随着用户(以及员工)数量的增长,读取次数以 N 2的速度增加。这显然是有问题的,因为如果每个用户只打开一次应用程序,只有 1,000 名用户的组织将导致 1,000,000 次读取。用户每天打开应用程序十几次,所以这个数字可能会有很大差异。

我最初的想法是,我可以在一个函数中获取员工集合并利用 CDN 上的缓存。但是,这是有问题的,因为我需要在大量用户之间共享缓存结果,而且似乎没有一种特别安全的方法可以在不打开应用程序泄露员工集合的情况下做到这一点。我需要通过用户的organistaionId 来改变结果,同时还要验证他们的身份验证令牌。

我已经考虑在客户端缓存结果,但这只会将读取次数减少到 1*N 2,因为每个客户端仍然需要至少一次获取集合。

其他选项包括 Redis 或使用 Algolia 之类的工具根据需要搜索结果。但这两种解决方案似乎都很快变得昂贵。

提前致谢。

4

1 回答 1

0

当用户打开应用程序时,我们将获取与其组织关联的员工集合。

这是我首先要考虑的。用户是否表示他们想查看组织的员工?如果这在成千上万的文档中运行,他们真的会看到所有这些吗?

更有可能:您有一个组织的“主页”,并且您希望在该主页上显示顶级(无论您如何定义“顶级”)员工和其他重要信息。

我不会让每个用户阅读所有用户以及所有相关的其他文档,而是创建一个包含此主页所有内容的单个文档。这意味着每个用户只需阅读一个文档以获取此信息,从而显着减少所需的阅读次数。

当然,这是以必须进行更多写入为代价的。所以你应该做一些备份餐巾纸的计算,看看它是否在你的情况下得到了回报,但我有根据的猜测是它确实如此。

另见:

于 2020-09-28T01:07:27.647 回答