AppEngine / Datastore:检索的最佳方式,因为祖先查询以递归方式返回所有内容

时间:2016-09-24 01:58:33

标签: google-app-engine go data-modeling google-cloud-datastore

当我使用祖先约束执行<?php echo '<ul>'; $files = ['text-1.htm', 'text-2.htm', 'text-3.htm']; foreach($files as $file) { if (file_exists($file)) { $file_clean = explode('.', $file); $file_clean = str_replace('-', ' ', $file_clean[0]); $file_clean = ucfirst($file_clean); echo '<li><a class="button" href="' . $file . '">' . $file_clean . '</a></li>'; } } echo '</ul>'; ?> 时,似乎我获得了该祖先密钥的所有实体以及它所属的所有祖先。

在这种情况下,我使用祖先关系来表示同质树(所有节点由相同类型表示;每个级别立即一致)。我使用的所有ID都是全局唯一的,我在每个实体上都写了父ID(除了它在祖先路径中)。

由于祖先检索返回的数据太多(所有级别都在及以下,而不仅仅是直接级别;文档没有提到这个和其他几个怪癖),我需要添加一个过滤器确保我回到目前的水平。

所以,问题在于效率与get()ancestor().filter()之间是否存在差异,因为这些对我来说都会产生相同的结果。

感谢。

1 个答案:

答案 0 :(得分:4)

只有filter()最终是一致的,而ancestor().filter()则非常一致。

正如您所提到的,您需要通过索引属性进行过滤,以获得树的特定级别。