Firestore 中的数据结构如何影响大型数据集中查询的优化、速度和成本?
How does data structure in Firestore affect optimization, speed, and cost of queries in large datasets?
有了这里的数据结构
+Nike
--Day1
timestamp: 11-11-2020
+Mentions
--001
timestamp: 11-11-2020
--002
timestamp: 11-11-2020
--Day2
timestamp: 11-12-2020
+Mentions
--001
timestamp: 11-12-2020
--002
timestamp: 11-12-2020
如果我放弃层次结构,只是将所有提及项转储到一个集合中,而不按日期将它们分开,那么查询是否昂贵,因为它还必须搜索每个提及项时间戳?
+Nike
--001
timestamp: 11-11-2020
--002
timestamp: 11-11-2020
--003
timestamp: 11-12-2020
--004
timestamp: 11-12-2020
您的直觉希望查询更少的数据,实际上在使用 Firestore 时并不需要。 Firestore 查询性能不取决于您查询的数据量,而仅取决于您检索的数据量。因此,将日期重复到每个提及项中是正确的方法,并且很常见.
我建议仍然保持每天的提及次数,但出于不同的原因:写 表现。在 Firestore 上,您主要受到写入性能限制的影响,特别是 Firestore 需要更新的索引。通过跨多个子集合对提及进行分段,您将减少 Firestore 需要更新的联合索引的数量,尽管对集合组查询的需求 does 意味着您至少有一个索引所有提及的内容都需要更新。
有了这里的数据结构
+Nike
--Day1
timestamp: 11-11-2020
+Mentions
--001
timestamp: 11-11-2020
--002
timestamp: 11-11-2020
--Day2
timestamp: 11-12-2020
+Mentions
--001
timestamp: 11-12-2020
--002
timestamp: 11-12-2020
如果我放弃层次结构,只是将所有提及项转储到一个集合中,而不按日期将它们分开,那么查询是否昂贵,因为它还必须搜索每个提及项时间戳?
+Nike
--001
timestamp: 11-11-2020
--002
timestamp: 11-11-2020
--003
timestamp: 11-12-2020
--004
timestamp: 11-12-2020
您的直觉希望查询更少的数据,实际上在使用 Firestore 时并不需要。 Firestore 查询性能不取决于您查询的数据量,而仅取决于您检索的数据量。因此,将日期重复到每个提及项中是正确的方法,并且很常见.
我建议仍然保持每天的提及次数,但出于不同的原因:写 表现。在 Firestore 上,您主要受到写入性能限制的影响,特别是 Firestore 需要更新的索引。通过跨多个子集合对提及进行分段,您将减少 Firestore 需要更新的联合索引的数量,尽管对集合组查询的需求 does 意味着您至少有一个索引所有提及的内容都需要更新。