【问题标题】:Excessive Datastore Writes when creating创建时数据存储区写入过多
【发布时间】:2012-03-30 14:17:15
【问题描述】:

您好昨天就这个问题提出了一个问题,现在已经简化了问题,看看它是否更容易解决/诊断。

我正在尝试批量创建 500 个 JDO 实体,每个实体都有一个“Key”作为主键、两个索引字符串和一个未索引字符串。

当我创建 500 个实体时,它使用 6% 的数据存储写入配额(来自 500000 的配额),即 30000 次写入操作,相当于每个实体 60 次写入。在开发服务器上,“写入操作”为 6,这与有关数据存储写入的各种 cmets 一致。没有搜索也没有复合索引,我只是创建了 500 个实体。

那么为什么我的实体需要 60? JDO 实体如下:

import javax.jdo.annotations.Extension;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;

import com.google.appengine.api.datastore.Key;

@PersistenceCapable
public class Product {

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;
    @Persistent
    private String productId;
    @Persistent
    private String productName;

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

      .
      .// getters and setters here but not included in post
      .
}

在循环中创建了 500 个实体:

private void createBulkProducts(PrintWriter out){
    int cnt = 0;
    Product tmpProd = null;
    PersistenceManager pm = PMF.get().getPersistenceManager();
    ArrayList<Product> products = new ArrayList<Product>();
    for(cnt = 0; cnt < 500; cnt++){
        tmpProd = createBulkProduct(new Integer(cnt).toString());
        products.add(tmpProd);
    }
    if(products.isEmpty() == false){
        pm.makePersistentAll(products);
        out.println(products.size() + " bulk products committed to database");
    }
    pm.close();
    out.println(cnt + " bulk products inserted");           
}

private Product createBulkProduct(String cnt){
    Product product = new Product();
    product.setMerchantProductId("mid" + cnt);
    product.setProductId("pid" + cnt);
    product.setProductName("the quick brown fox jumps over the lazy dog " + cnt);
    return product;
}

我在 GAE 1.6.1 上运行

非常感谢所有帮助/建议 克雷格

【问题讨论】:

  • 您是否启用了会话?
  • 重复:这确实是同一个问题:stackoverflow.com/questions/9927248/…
  • 是重复的,但我简化了问题以使其更容易理解。答案很简单,配额是 50,000 而不是 500,000,所以我假设有问题,如果事实一切正常。

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


【解决方案1】:

免费应用程序的每日配额是 50k 写入操作,而不是 500k。查看您的仪表板应该显示n.nn of 0.05 Million Ops

考虑到这一点,所有计算都可以。

【讨论】:

  • 谢谢你的权利,我是个白痴,不敢相信我错过了它。
猜你喜欢
  • 2021-04-23
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多