Я не знаю о разнице в производительности, я подозреваю, что она будет похожей. Когда дело доходит до совершенства, с хранилищем данных GAE сложно справиться. Если все ваши запросы попадают на один и тот же планшет (большой сервер), это может ограничить вашу производительность больше, чем сам запрос.
Большая разница в том, что A будет дешевле, чем B. Поскольку у вас есть список действий, которые вы хотите, вам не нужно писать индекс для каждого объекта деятельности, который вы пишете. Если действия написаны много, ваши сбережения складываются.
Поскольку у вас есть ключ активности, у вас также есть возможность выполнять высокосогласованный метод get (), а не в конечном итоге согласованный фильтр ()
С другой стороны, вы не сможете делать обратные ссылки, как, например, искать владельца по заданию. Ваше свойство ListProperty также может привести к тому, что вы достигнете своего максимального размера объекта - со временем будет жесткое ограничение на количество действий на пользователя. Если вы пошли с B, вы можете иметь огромное количество действий на пользователя.
Редактировать: я забыл, у вас может обратная ссылка, если вы индексируете свой ListProperty, но тогда написание вашего объекта User будет дорогостоящим, а ограничение на количество индексированных свойств будет ограничивать размер вашего списка. Поэтому, даже если это возможно, B все еще предпочтительнее, если вам нужны обратные ссылки.