2016-10-18 4 views
1

Objectify - это API/служба Google для хранения объектов Java в хранилище данных Google. Сначала мои операции были быстрыми (низкие десятки миллисекунд). Теперь они стали медленными (400-600 мс).Как анализировать производительность Objectify?

Объективирование также включает одну операцию в несколько операций, например. запрос просматривает идентификаторы сущностей в индексе и затем извлекает некоторые объекты из memcache и другие из хранилища данных. Есть аннотации полей, которые влияют на то, сколько операций создано. Есть потенциально много мест, где что-то может пойти не так, как надо.

Как я могу получить представление о том, что Objectify фактически делает как для повышения производительности, так и для уменьшения биллинга (путем запуска менее эффективных операций)?

Я просмотрел документацию Objectify и широко обыскал веб-сайт. Я не смог найти способ диагностики запросов Objectify.

+0

Havae, который вы пробовали, делает тот же запрос, используя низкий API Datastore API? Таким образом, вы можете определить, является ли самая медленная часть самой Datastore или Framework Objectify –

+0

Какие операции вы выполняете? Вы отбрасываете все сущности? Если ничего не изменилось, возможно, изменился размер данных? – Robert

+0

Я еще не изучил API Datastore. Я оттягиваю все сущность. То, что я вижу, изменилось, это количество объектов в магазине. Не использует ли индекс хэш, который не должен замедляться с более индексированными объектами? –

ответ

0

Посмотрите на анализ стека драйверов GAE RPC, чтобы узнать, что происходит под обложками. Он даст вам список сырых операций.

На самом деле не так много неочевидных мест, где все может пойти не так, как надо. Гибридные запросы (включение запроса в запрос только для ключей, за которым следует пакетный доступ) применяются только к объектам @Cache. Философия проста - если эффективно кэшировать ваши сущности, возможно, эффективно использовать кеш как можно больше. Если вы не уверены, устраните @Cache.

Помимо этого, Objectify просто переводит низкоуровневые Entity объектов в POJO. Это разумно эффективно, но вы можете, конечно, построить патологические случаи. Следите за длительными и дорогостоящими методами жизненного цикла (@OnLoad и друзьями). Вложенные списки списков списков и т. Д. Могут легко создавать операции O (N^3). Но они должны быть очевидны при их создании. Особенно, если вы используете @Load на Ref<?> объектах. Нагрузки не являются бесплатными.

+0

Спасибо. Анализ стеков был тем, что я искал. Для каждого HTTP-запроса он показывает мне, какие операции хранилища данных и memcache были сгенерированы. Это может быть его собственный вопрос. Временная шкала stackdriver показывает, что Objectify удовлетворяет всем данным с помощью memcache. Операции memcache заняли 4 мс, что я и ожидал для хэш-поиска. Вот тайна. Я помещаю строку ведения журнала до и после вызова Objectify. Весь вызов Objectify занял 200 мс. Как я могу узнать, что происходит в этих дополнительных 196-х годах? –

Смежные вопросы