为什么这个实体导致如此多的索引写入?

时间:2011-12-29 18:20:27

标签: google-app-engine google-cloud-datastore

我有以下实体(通过JDO指定):

    @PersistenceCapable(
        identityType = IdentityType.APPLICATION, detachable = "true")
    public class Subscription {
      @PrimaryKey
      @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
      private Long id;

      @Persistent
      private String user;

      @Persistent(defaultFetchGroup = "true")
      private Link feedUrl;

      @Persistent(defaultFetchGroup = "true")
      @Extension(vendorName = "datanucleus", key = "gae.unindexed", value="true")
      private Link hubUrl;

      @Persistent
      @Extension(vendorName = "datanucleus", key = "gae.unindexed", value="true")
      private String title;

      @Persistent(defaultFetchGroup = "true")
      @Extension(vendorName = "datanucleus", key = "gae.unindexed", value="true")
      private Set<String> seenEntryIds;
    }

(参见完整实体定义here

它只有三个索引属性,iduserfeedUrl。在开发服务器上运行时,控制台会说每个实体都会产生6个写操作。

但是,在生产中运行时,配额详细信息页面显示已有4,276个实体put操作和164,110个索引写操作,每个实体平均提供38个索引写入。这比我预期的要高得多,也远远高于开发服务器所显示的内容。

我添加了gae.unindexed属性late yesterday,然后推送了更改。因此,我希望今天发生的所有实体放置(这是配额详细信息页面报告的内容)不反映任何额外的索引写入。

1 个答案:

答案 0 :(得分:0)

我的第一个猜测是,有一个旧的WEB-INF/datastore-indexes.xml正在铺设,但你似乎没有一个(而且它不在你的.gitignore中)。

seenEntryIds集的平均大小是多少?如果它是~16,这给了我一个测试用例的想法。