我可以为每个租户创建不同的集合集以避免争用问题吗?
Can I create different sets of collections per tenant to avoid contention issues?
我正在考虑将 Google Cloud Firestore 用于多租户应用程序。
我看到了这个页面,它给出了关于规模的建议:https://cloud.google.com/firestore/docs/best-practices#designing_for_scale
还有此页面显示限制:https://cloud.google.com/firestore/quotas
我想出了这个解决方案,它可以以最少的成本或没有额外成本提高应用程序的性能和弹性。
解决方案:我可以在应用程序中为每个多租户集合使用不同的集合,例如:products_1、orders_1、products_2、orders_2。
我想使用它是因为:
1- 它会有更好的性能,因为我有更小的 tables/indexes。否则从长远来看,它可能包含太多文件。
2- 这是可行的,因为代码通过名称与集合交互,我不必显式创建集合。与使用关系数据库/ORM 组合相比,这似乎不是什么大问题。
3- 我可以使用不同的名称创建多少个集合没有限制。
所以我的问题是:
我的任何假设是否不正确,以至于它不会在性能方面获得任何收益,或者即使没有记录也无法创建无限数量的集合。
最后,这种方法是否会造成我目前无法意识到的长期维护问题?
感谢您的宝贵时间。
使用单独的集合来分片客户端绝对是提高整体写入吞吐量的一种方法。但是您不需要集合的命名约定。
相反,我会考虑为所有 tenants/users 创建一个顶级集合,然后为每个 tenant/user 文档创建一个子集合。这样每个 tenant/user 都有一个单独的子集合,但仍然有可预测的集合名称。
我正在考虑将 Google Cloud Firestore 用于多租户应用程序。
我看到了这个页面,它给出了关于规模的建议:https://cloud.google.com/firestore/docs/best-practices#designing_for_scale
还有此页面显示限制:https://cloud.google.com/firestore/quotas
我想出了这个解决方案,它可以以最少的成本或没有额外成本提高应用程序的性能和弹性。
解决方案:我可以在应用程序中为每个多租户集合使用不同的集合,例如:products_1、orders_1、products_2、orders_2。
我想使用它是因为:
1- 它会有更好的性能,因为我有更小的 tables/indexes。否则从长远来看,它可能包含太多文件。
2- 这是可行的,因为代码通过名称与集合交互,我不必显式创建集合。与使用关系数据库/ORM 组合相比,这似乎不是什么大问题。
3- 我可以使用不同的名称创建多少个集合没有限制。
所以我的问题是: 我的任何假设是否不正确,以至于它不会在性能方面获得任何收益,或者即使没有记录也无法创建无限数量的集合。
最后,这种方法是否会造成我目前无法意识到的长期维护问题?
感谢您的宝贵时间。
使用单独的集合来分片客户端绝对是提高整体写入吞吐量的一种方法。但是您不需要集合的命名约定。
相反,我会考虑为所有 tenants/users 创建一个顶级集合,然后为每个 tenant/user 文档创建一个子集合。这样每个 tenant/user 都有一个单独的子集合,但仍然有可预测的集合名称。