如何解决Google Datastore n + 1查询问题?

时间:2017-03-20 03:10:49

标签: google-cloud-datastore

假设我有一个包含2种谷歌数据存储类型的父/子关系模型。

如果我使用父键查询子表,有没有办法从父表中检索字段而不必进行n + 1次查询?

RequestLedger
key | type   | content | sentTimestamp
123   email    <ssd>     10-10-10


ResultLedger
key               | requestLedger            |to            | deliveredTimestamp | bouncedTimestamp | other
123-xxx@xxx.com     key(request_ledger,123)   xxx@xxx.com     10-10-10

var query = ds.createQuery(env.get('GCLOUD_DATASTORE_NAMESPACE'), resultLedgerKind)
.offset(offset)
.limit(max);

if(parentId){
    query = query.filter('requestLedger', ds.key([requestLedgerKind, parentId]));

}


query.run(function(err, entities) {

  callback(err, entities );
});

上面的查询给出了子表中的数据和父类实体的引用,但只给出了父类的键字段。是否可以轻松地将所有内容同时放回查询中?

1 个答案:

答案 0 :(得分:1)

您可以使用查找方法在一个请求中通过其键获取多个实体。其余的例子是here我确信javascript实现有类似的实现。

请注意,由于api v1在一个请求中可以获得1000个密钥的限制。在测试版中,情况并非如此。

如果你先找到孩子,然后查找他们各自的父键,这应该会带回你的请求数。