Сколько объектов «слишком много» для одной транзакции в Google DataStore (High Replication)? - PullRequest
8 голосов
/ 24 ноября 2011

У меня есть следующий объект (ненужные поля / методы удалены).

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 ]

5 голосов
/ 24 ноября 2011

Проблема не в количестве получаемых вами сущностей, а в том, что они находятся в нескольких группах сущностей. Либо выполните выборку вне транзакции, либо используйте транзакцию XG (кросс-группа) .

1 голос
/ 24 ноября 2011

В одной транзакции вы можете управлять объектами в той же группе объектов.

Что можно сделать в транзакции

...