Google Firestore-高效地获取单个文档,在子集合中执行点查询



假设我正在设计一个新的Firestore数据库。假设我喜欢分层设计的想法,并且作为一个人为的例子,每个都有一系列子,其中每个周都有

目前检索单个文档的最有效性能的方法是什么?即2021-W51-周四

答案被允许包括对模型的改变;反规范化";以使其包括yearweekdayName字段(并查询它们(。

否则,简单的文档参考可能是最快的方法,如:

DocumentReference ref = db
.Collection("years").Document("2021")
.Collection("weeks").Document("51")
.Collection("days").Document("Thursday");

谢谢。

任何标识要获取的单个文档的查询与任何其他以Firestore操作的规模执行相同的查询具有同等的性能。藏品或文件的组织在规模上并不重要。根据您的数据集,您可能会看到小规模的性能波动,但Firestore并不是这样优化工作的。

所有集合和所有子集合在文档ID上都至少有一个索引,其工作方式相同,独立于其他集合和索引。如果您可以使用其路径识别唯一的文档:

/db/XXXX/weeks/YY/days/ZZZZ

然后,它的规模与使用更扁平的结构存储的文档相同:

/db/XXXXYYZZZZ

在规模上,没有区别,因为集合上的索引可以扩展到无限数量的文档,没有理论上限。这就是Firestore的神奇之处:如果系统允许查询,那么它将始终运行良好。您根本不用担心扩展和性能。索引会自动在计算资源之间进行分片,以优化性能(相对于成本(。

对于文档的字段(而不是文档ID(,以上所有情况都适用。您可以将文档ID视为文档的一个字段,该字段在集合中必须是唯一的。默认情况下,每个字段都有自己的索引,并且可以进行大规模扩展。

使用像Firestore这样的NoSQL数据库,您应该以简化查询的方式来构建数据,只要这些查询可以由按比例运行的索引所支持。这与SQL数据库形成了鲜明对比,后者针对查询灵活性而非大规模可扩展性进行了优化。

最新更新