每个云数据存储区查询使用一个或多个索引计算其结果,这些索引包含由索引属性和(可选)实体的祖先指定的序列中的实体键。索引会逐步更新,以反映应用程序对其实体所做的任何更改,以便所有查询的正确结果都可用,无需进一步计算。
一般来说,我想知道是否
datastore.get(List<Key> listOfKeys);
比编写索引文件的查询更快或更慢(具有相同的结果)。
Query q = new Query("Kind")(.setFilter(someFilter));
我目前的问题:
我的数据包括图层和点数。点只属于一个唯一图层,并且在图层中具有唯一ID。我可以用几种方式加载点数:
1)使用&#34;图层名称&#34;属性和带过滤器的查询。 - 这里我不确定数据存储区是否会准备好结果,因为图层名称会动态变化。
2)仅使用按键。该层必须存储点ID。
KeyFactory.createKey("Layer", "layer name");
KeyFactory.createKey("Point", "layer name"+"x"+"point id");
3)使用没有过滤器的查询:我实际上并不需要一般的类型&#34; Point&#34;并且可以更具体:善意是(&#34;图层名称&#34; +&#34;点ID&#34;) - 创造更多种类的成本是多少?这可能是最快的方式吗?
您真的可以详细了解数据存储区的工作原理吗?
答案 0 :(得分:1)
比编写索引文件的查询更快或更慢(具有相同的结果)。
从根本上说,查询和按键获取不能保证具有相同的结果。
查询最终是一致的,而按键获取数据非常一致。
在优化速度之前,您的第一个挑战可能是确保您显示正确的数据。
文档适用于解释最终与强一致性,听起来您可以选择使用可以强烈一致的祖先查询。我还强烈建议避免使用“名称” - 这是动态的 - 作为实体名称,这会让你产生过多的悲伤。
编辑: 为了特别有用,基于您的描述的工作解决方案的一个选项是:
另一种选择是将点存储为嵌入式实体,并且整个层只有一个实体 - 取决于您要实现的目标。