2012-03-30 22 views
0

您好昨天问了一个问题,现在简化了问题,看看它是否更容易解决/诊断。过度的数据存储创建时写入

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

当我创建500个实体它使用数据存储区写入quoto(从500000 quoto)的6%,这是这相当于每60个实体写入30000个写入操作。在开发服务器上,“写操作”是6,它与关于数据存储写入的各种评论一致。没有搜索,也没有复合索引,我只是创建了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

所有帮助/建议不胜感激 克雷格

+0

您是否启用了会话? – 2012-03-30 14:40:21

+0

重复:这真的是同一个问题:http://stackoverflow.com/questions/9927248/datastore-writes-when-creating-deleting-jdo-entries – dragonx 2012-03-30 14:44:21

+0

为复制的,但我简化,使其更容易跟踪问题答案很简单,配额是50,000,而不是500,000,所以我认为如果事实一切正常,都会出现问题。 – 2012-03-30 16:07:07

回答

1

免费应用程序的每日配额为50k个写操作,而不是500k。看到你的仪表板应该说的地方n.nn of 0.05 Million Ops

将此考虑在内所有计算均为正常。

+0

谢谢,你的权利,我是一个白痴,不能相信我想念它。 – 2012-03-30 16:04:16