在Google的DataStore(High Replication)的单个交易中,有多少对象“太多”?

时间:2011-11-24 02:31:30

标签: google-app-engine transactions google-cloud-datastore objectify

我有以下实体(删除了不相关的字段/方法)。

public class HitsStatsTotalDO
{
    @Id
    transient private Long targetId;

    public Key<HitsStatsTotalDO> createKey()
    {
        return new Key<HitsStatsTotalDO>(HitsStatsTotalDO.class, targetId);
    }
}

所以...我正在尝试为10个对象进行批量获取,我使用HitsStatsTotalDO.createKey()为其构建键。我试图在这样的事务中获取它们:

final List<Key<HitsStatsTotalDO>> keys = ....

// This is being called in transaction..
Map<Key<HitsStatsTotalDO>, HitsStatsTotalDO> result = DAOBase.ofy().get(keys);

抛出以下异常:

java.lang.IllegalArgumentException: operating on too many entity groups in a single transaction.

请您详细说明有多少太多以及如何解决?我在文档中找不到确切的数字。

谢谢!

2 个答案:

答案 0 :(得分:5)

问题不在于您检索的实体数量,而是它们位于多个实体组中。要么在事务外部进行提取,要么使用XG (Cross Group) transaction

答案 1 :(得分:1)

在单个交易中,您可以在同一个实体组中操作实体。

  

What Can Be Done In a Transaction