Я использую хранилище данных Google App Engine (DataNucleus). У меня есть два класса, один чат и один рейтинг. Чат может быть оценен больше, чем один, поэтому я создал отношение один-много, добавив список в класс Chat.
Теперь я хочу узнать количество чатов без рейтинга, поэтому я сделал следующее:
int numberOfChatsInStock = 0;
for(Chat chat : chats){
if(chat.getRatings().size() == 0){
numberOfChatsInStock++;
}
}
Он просто перебирает все чаты и проверяет, равно ли количество оценок 0.
Это решение хорошо работает, когда есть 10 чатов, но когда у меня 500+ чатов, скорость ужасна (15 секунд +).
Я подумал, что метод size () работает быстрее. Поэтому я попытался Query.setFilter ("ratings.size () == 0"), но это дает мне следующую ошибку:
Неподдерживаемый метод при разборе выражения: InvokeExpression {[PrimaryExpression {рейтинги}]. Size ()}
Есть ли способ увеличить скорость?
EDIT
РЕАКЦИЯ ОТ DATANUCLEUS EXPERT:
Это плагин Google, и они несут за него ответственность (и тот факт, что они не реализовали этот метод, является их проблемой ... Я уверен, что их хранилище данных предлагает способ получения размера коллекции). Их плагин использует только DataNucleus 1.1, и в настоящее время мы разрабатываем 2.2, поэтому, как вы можете догадаться, у нас не так много времени для среды GAE / J.
Почему Google использует версию 1.1?