Java 让事务在App Engine读取和写入中包装每个数据存储事件是否存在性能风险?

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();

根据App Engine文档,在事务中包装datstore事件,如下所示:

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文档包括一个部分,您可能会在其中找到帮助


此外,批处理数据存储操作通常很方便,可以最大限度地减少应用程序与数据存储之间的往返次数。如果将每个操作包装在一个事务中,则必须单独发送每个事务(这将非常慢,特别是如果同步发出每个请求)。

由于声明事务需要更多的工作,因此必须产生开销。也就是说,我从来没有遇到过不必要的事务会导致我的性能问题