Firestore集合设计出现问题

时间:2019-08-03 15:02:05

标签: node.js firebase google-cloud-firestore

我在Firestore数据库中有一个用于注释部分的设计,我只是在努力解决其中的一部分。香港专业教育学院试图使其有效的读取/写入次数以节省成本。

计划是制作一个集合,该集合具有我们要评论的项目的单个文档。在里面,我将有一个文档的子集合(每个文档将是一个保存有50条注释的数组的块)。当前块编号将存储在父文档中,与子集合处于同一级别。

+Doc1
     -Block num : 1 
     -Subcollection
                  + 0 : Array of 50 comments  
                  + 1 : Array of 50 comments 
                   etc 

所以我希望每个评论都具有某些属性,例如ID,评论文本,用户名和2个喜欢/不喜欢它的用户数组。

通过这种方式,我可以按最新注释排序(因为我只是向后读这些块。)

我的问题是我想按最喜欢或不喜欢的评论排序...因为现在每个块都可以包含大量喜欢的评论。

是否可以通过构造一个新集合或调整该集合来构造此结构,从而不必按喜欢的次数按顺序读取每个块中的内容?

如果有人知道我的设计有任何缺陷,请随时提出改进建议。

谢谢您的帮助:)

---编辑

对不起,我忘了提到我要避免将每条评论都写成文档,因为在阅读大量文档时会花费很多钱。

1 个答案:

答案 0 :(得分:1)

为了能够在所有注释中使用Firestore查询,每个注释必须是一个单独的文档。由于您明确排除了该选项,因此您不能依靠Firestore查询来实现用例。

在这种情况下,下一个选择通常是找到允许您使用的数据模型。例如,如何根据文件的投票数将评论分片?因此,最受好评的前50个注释在document1中,接下来50个在document2中,依此类推。这样一来,您可以在单个(或最多几个)文档中获得最受欢迎的注释。

请注意,这将导致编写投票的代码非常复杂,并可能不得不在文档周围打乱注释。这是您必须权衡的:额外的复杂性和时间成本是否值得通过减少读取操作而节省下来的成本?