如何优化AppEngine Java/JDO数据存储put()以减少写入
我正在调整我们在AppEngine上运行的一个应用程序,最大的成本之一是数据存储的读写。我注意到,最严重的违规行为之一是我们坚持一项命令 基本数据是订单有许多项目-我们分别存储这两个项目,并将其关联如下:如何优化AppEngine Java/JDO数据存储put()以减少写入,java,google-app-engine,jdo,Java,Google App Engine,Jdo,我正在调整我们在AppEngine上运行的一个应用程序,最大的成本之一是数据存储的读写。我注意到,最严重的违规行为之一是我们坚持一项命令 基本数据是订单有许多项目-我们分别存储这两个项目,并将其关联如下: @PersistenceCapable public class Order implements Serializable { @Persistent(mappedBy="order") @Element(dependent = "true") private
@PersistenceCapable
public class Order implements Serializable {
@Persistent(mappedBy="order")
@Element(dependent = "true")
private List<Item> orderItems;
// other fields too obviously
}
@PersistenceCapable
public class Item implements Serializable {
@Persistent(dependent = "true")
@JsonIgnore
private Order order;
// more fields...
}
@PersistenceCapable
公共类顺序实现可序列化{
@持久性(mappedBy=“order”)
@元素(dependent=“true”)
私人物品清单;
//其他领域也太明显了
}
@持久的
公共类项实现可序列化{
@持久性(dependent=“true”)
@杰索尼奥雷
私人秩序;
//更多领域。。。
}
appstats显示了一个订单的两个数据存储放置和一个项目,但都使用了大量的写入。我想从任何有经验的人那里知道优化这个的最佳方法
AppStats数据:
real=34ms api=1695ms成本=6400计费操作=[数据存储写入:64]
real=42ms api=995ms成本=3600计费操作=[数据存储写入:36]
我所知道的一些领域可能会有所帮助:
- 新实体放置(每个实体,无论实体大小):2次写入+每个索引属性值2次写入+每个复合索引值1次写入
- 现有实体Put(每个实体):1次写入+4次写入/修改的索引属性值+2次写入/修改的复合索引值
- 同样相关的还有:
put
操作在提交阶段之后返回,并且不受索引数量的影响
在您的情况下,您正在调用两个看跌期权,一个接一个。正如您可以从AppStats图中看到的,它们是连续发生的。您可能希望以并行方式执行它们(不确定是否在JDO中可用) 谢谢Peter,除了我注意到的4个步骤之外,还有什么其他步骤是你建议研究的吗?或者我的想法是对的。@Ashley:我用最重要的信息更新了答案-索引的数量会影响写入成本,但不会影响写入速度。要在您的情况下加快速度,请参阅异步操作。