你昨天就此问了一个问题,现在已经简化了问题,看它是否更容易解决/诊断。
我正在尝试批量创建500个JDO实体,每个实体都有一个“Key”作为主键,两个索引字符串和一个未编制索引的字符串。
当我创建500个实体时,它使用6%的数据存储区写引号(来自500000的引号),这是30000次写操作,相当于每个实体60次写入。在开发服务器上,“write ops”是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 :(得分:1)
免费应用的每日配额是50k写操作而不是500k。请参阅信息中心,其中应显示n.nn of 0.05 Million Ops
。
考虑到这一点,所有计算都可以。