我正试图找出如何减少对相对静态的firestore集合的读取。
我的数据结构的基础:
- 用户/{userId}
- 组织/{organizationId}/员工/{employeeId}
每个用户将属于一个组织。用户和员工没有参考联系,但随着越来越多的用户加入一个组织,员工文档的数量可以假设大致等于该组织中的用户数量。
员工的集合不会经常改变,但在特殊的日子里,可能会收到100封信。
当用户打开应用程序时,我们将获取与其组织相关的员工集合。
我面临的问题是,随着用户数量(以及员工数量(的增长,读取次数以N2的速度增加。这显然是有问题的,因为如果每个用户只打开一次应用程序,一个只有1000名用户的组织将导致1000000次阅读。用户每天打开该应用程序十几次,所以这个数字可能会有所不同。
我最初的想法是,我可以在一个功能中获取员工的集合,并利用CDN上的缓存。不过,这是有问题的,因为我需要在大量用户之间共享缓存结果,而在不打开应用程序泄露员工集合的情况下,似乎没有特别安全的方法来做到这一点。我需要根据用户的organizationId来更改结果,同时还要验证他们的auth令牌。
我已经考虑过在客户端上缓存结果,但这只会将读取量减少到1*N2,因为每个客户端仍然需要至少获取一次集合。
其他选项包括Redis或根据需要使用Algolia之类的东西来搜索结果。但这两种解决方案似乎都很快变得昂贵。
提前谢谢。
当用户打开应用程序时,我们将获取与其组织关联的员工集合。
这是我要考虑的第一件事。用户是否表示希望见到该组织的员工?如果这在成千上万的文档中运行,他们真的会看到所有文档吗?
更有可能的是:你有一个";主页";对于组织,您希望在主页上显示顶级(无论您如何定义"顶级"(员工和其他重要信息。
我不想让每个用户阅读所有用户以及所有相关的其他文档,而是创建一个包含该主页所有内容的文档。这意味着每个用户只阅读一个文档来获取这些信息,从而大大减少了所需的阅读次数。
当然,这是以必须写更多文章为代价的。所以你应该做一些事后的计算,看看在你的情况下是否有回报,但我有根据的猜测是,确实有回报。
另请参阅:
- 最大化Firestore中的文档存储