Java 让事务在App Engine读取和写入中包装每个数据存储事件是否存在性能风险?
根据App Engine文档,在事务中包装datstore事件,如下所示:Java 让事务在App Engine读取和写入中包装每个数据存储事件是否存在性能风险?,java,database,performance,google-app-engine,transactions,Java,Database,Performance,Google App Engine,Transactions,根据App Engine文档,在事务中包装datstore事件,如下所示: import javax.jdo.Transaction; import ClubMembers; // not shown // ... // PersistenceManager pm = ...; Transaction tx = pm.currentTransaction(); try { tx.begin();
import javax.jdo.Transaction;
import ClubMembers; // not shown
// ...
// PersistenceManager pm = ...;
Transaction tx = pm.currentTransaction();
try {
tx.begin();
ClubMembers members = pm.getObjectById(ClubMembers.class, "k12345");
members.incrementCounterBy(1);
pm.makePersistent(members);
tx.commit();
} finally {
if (tx.isActive()) {
tx.rollback();
}
}
如果您不仅在事务中包装每个写入事件,而且还包装每个读取事件,这是否会对应用程序的性能产生负面影响?在事务中执行读取和写入肯定会有开销 在很多情况下,这是没有意义的——如果您只是从数据存储中读取一个值,那么将单个读取操作包装到事务中没有任何好处。当您有一组需要一起执行的多个操作(如问题中包含的get、increment、persist示例)时,保存事务。GAE文档包括一个部分,您可能会在其中找到帮助
此外,批处理数据存储操作通常很方便,可以最大限度地减少应用程序与数据存储之间的往返次数。如果将每个操作包装在一个事务中,则必须单独发送每个事务(这将非常慢,特别是如果同步发出每个请求)。由于声明事务需要更多的工作,因此必须产生开销。也就是说,我从来没有遇到过不必要的事务会导致我的性能问题