对于如何解决可能的冗余数据查询,我感到两难。
我正在将MongoDB与Apollo服务器和客户端一起使用。我的MongoDB有几个数据集合。主要集合由指向支持集合的ID组成。
我不确定如何解决我的主集合ID与支持集合ID的映射以检索实际值。关键是,大多数时候我已经在Apollo客户端缓存中缓存了支持集合的数据。
您认为我应该只查询主集合中的ID并使用缓存的数据将ID映射到前端的值吗?还是应该有一个解析器在主集合中使用ID,对支持的集合进行数据库查询,以获取每个ID的值,然后将准备好的数据发送到前端?
我非常感谢您的见解!谢谢。
答案 0 :(得分:0)
一如既往,这取决于。我认为这是您的设置,带有主收藏。
type OtherDoc {
id: String
field: String
}
type MainDoc {
id: String
otherDocs(param: String): [OtherDoc]
}
type Query {
mainDocs: [MainDoc]
}
在这种情况下,查询mainDocs { id otherDocs("...") { id field } }
绝对是获取此数据的自然方法。从不同的OtherDoc
得到相同的文档时获取param
来说,这可能是多余的。如果是这样,您 可以考虑只查询其ID,然后在客户端没有ID的情况下查询单独的文档。
我会说这是一个有效的解决方案,但绝对不是您从一开始就应该考虑的问题。这种优化肯定会限制带宽,但会增加请求数。而且,您不知道何时实际重新获取OtherDoc
。好吧,也许您这样做了,但是您必须考虑并构建它,而无需开箱即用。
另一种方法,一种更易于缓存的方法,可能会更改架构以限制数据重叠的情况。由于业务逻辑,这并非总是可能的,但值得考虑。