我试图弄清楚如何减少对相对静态的 Firestore 集合的读取。
我的数据结构的基础知识:
- 用户/{userId}
- 组织/{organisationId}/employees/{employeeId}
每个用户将属于一个组织。用户和员工之间没有参照联系,但是随着更多用户加入组织,可以假设员工文档的数量大致等于该组织中的用户数量。
员工的集合不会经常更改,但在特殊的日子里,可能会收到 100 次写入。
当用户打开应用程序时,我们将获取与其组织关联的员工集合。
我面临的问题是,随着用户(以及员工)数量的增长,读取次数以 N 2的速度增加。这显然是有问题的,因为如果每个用户只打开一次应用程序,只有 1,000 名用户的组织将导致 1,000,000 次读取。用户每天打开应用程序十几次,所以这个数字可能会有很大差异。
我最初的想法是,我可以在一个函数中获取员工集合并利用 CDN 上的缓存。但是,这是有问题的,因为我需要在大量用户之间共享缓存结果,而且似乎没有一种特别安全的方法可以在不打开应用程序泄露员工集合的情况下做到这一点。我需要通过用户的organistaionId 来改变结果,同时还要验证他们的身份验证令牌。
我已经考虑在客户端缓存结果,但这只会将读取次数减少到 1*N 2,因为每个客户端仍然需要至少一次获取集合。
其他选项包括 Redis 或使用 Algolia 之类的工具根据需要搜索结果。但这两种解决方案似乎都很快变得昂贵。
提前致谢。