如何发现存储实体的属性是否已编入索引或未编入索引?

时间:2012-02-09 08:12:37

标签: google-app-engine indexing datastore

我在数据存储区中有几个实体,但我不知道它们的某些属性是否已编入索引或未编入索引。 如果存储的实体的属性被索引或未编入索引,我如何发现(使用管理控制台或以编程方式)?

4 个答案:

答案 0 :(得分:3)

默认情况下,每个实体都被编入索引(除非它的TextProperty或BlobProperty),如果您不希望将其编入索引(以提高性能和实体编写成本),则需要(并且应该)将属性indexed属性设置为False。

管理控制台中没有关于属性是否已编入索引的指示,您可以尝试在数据存储区视图的GQL中执行“按属性选择*来自EntityType”并查看它是否失败。

答案 1 :(得分:3)

如果您在某些属性上一直在indexed=Trueindexed=False之间翻转,并且在两种制度下都有一组实体,那么您将拥有一些被编入索引的属性那不是。这是你所处的情况吗?

如果您的代码没有可靠的历史记录,那么根据您拥有的实体数量,尝试确定您是否处于这种情况下有点棘手。您可以通过注意实体上的仅密钥查询是否返回与过滤可疑属性的查询不同的密钥数来确定您是否处于不一致状态。过滤器将找不到未编入索引的属性。如果你有很多实体,你必须以某种方式对计数进行分片(以避免在返回大量实体的长查询上超时)。

如果您确定确实存在不一致的索引,并希望修复您的实体以保持一致,那么通常的方法是编写一个mapreduce来触及所有不稳定的实体并发出必要的属性。< / p>

答案 2 :(得分:0)

对于复合索引(即datastore-indexes.xmlindex.yaml中定义的索引),您可以使用低级API获取应用程序数据存储区中存在的索引列表。

在GAE / J中,您需要调用DatastoreServiceFactory.getDatastoreService().getIndexes(),而在Python中,db.get_indexes()提供相同的功能。

答案 3 :(得分:0)

查看“数据存储索引”界面,其链接位于应用引擎信息中心左侧导航菜单中。

在那里,您将看到索引列表以及已应用索引的特定属性。