【问题标题】:Why does this entity result in so many index writes?为什么这个实体会导致如此多的索引写入?
【发布时间】:2011-12-29 18:20:26
【问题描述】:

我有以下实体(通过 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 个实体放置操作和 164,110 个索引写入操作,这使得每个实体平均有 38 个索引写入。这比我预期的要高得多,也比开发服务器显示的要高得多。

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 确实没有自定义索引。 seenEntryIds 的平均大小为 324(大多数提要经常更新,保留的最大数量为 1000)。
    • 另外,现在配额周期又开始了,目前的比率是每个 put 8.5 次索引写入(2,088 次索引写入,245 次 put)。这仍然高于预期,但低于以前。
    • 作为最后一个细节,这个周期中的大多数(~50%)看跌期权都是针对同一个实体(一个不断更新的提要),很久以前就达到了上限 1,000 @ 987654325@
    • 很奇怪。鉴于您的设置方式,我预计新订阅需要 6 次写入。
    • 它似乎正朝着这个方向发展。今天的最新比率是每次看跌 6.6 次索引写入(22,108 次索引写入,3351 次看跌)。
    猜你喜欢
    • 2019-09-09
    • 2013-04-06
    • 2012-02-16
    • 2019-11-17
    • 2013-04-30
    • 2013-12-30
    • 1970-01-01
    • 2020-10-30
    • 2013-02-25
    相关资源
    最近更新 更多