解决查询(冗余)数据的最佳方法

时间:2019-01-07 16:16:26

标签: javascript database graphql

对于如何解决可能的冗余数据查询,我感到两难。

我正在将MongoDB与Apollo服务器和客户端一起使用。我的MongoDB有几个数据集合。主要集合由指向支持集合的ID组成。

我不确定如何解决我的主集合ID与支持集合ID的映射以检索实际值。关键是,大多数时候我已经在Apollo客户端缓存中缓存了支持集合的数据。

您认为我应该只查询主集合中的ID并使用缓存的数据将ID映射到前端的值吗?还是应该有一个解析器在主集合中使用ID,对支持的集合进行数据库查询,以获取每个ID的值,然后将准备好的数据发送到前端?

我非常感谢您的见解!谢谢。

1 个答案:

答案 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。好吧,也许您这样做了,但是您必须考虑并构建它,而无需开箱即用。

另一种方法,一种更易于缓存的方法,可能会更改架构以限制数据重叠的情况。由于业务逻辑,这并非总是可能的,但值得考虑。