Самый быстрый способ проверить, существует ли объект - PullRequest
5 голосов
/ 04 августа 2010

Я использую GAE / Java с Objectify, и я пытаюсь найти самый быстрый способ проверить, существует ли данный объект в хранилище данных, учитывая ключ.Сейчас я делаю .get(key) при включенном @Cached, но в любом случае можно получить весь объект, что не нужно.

Есть идеи, как это сделать, если индекс только ударил?Я также думал о запросе «только ключи», но я вижу (на информационной панели состояния системы 1006 *), что задержка намного больше, чем get.

Ответы [ 4 ]

4 голосов
/ 12 марта 2011

Просто выполните get () с включенным кешем. Если у вас нет дорогостоящей логики в методе @PostLoad, извлечение данных из кэша памяти должно быть значительно дешевле, чем весь путь в хранилище данных даже для запроса только по ключам. Кеш твой друг.

Как примечание, это звучит как преждевременная оптимизация. Создайте свое приложение, используя наиболее удобный код, затем запустите appstats и выясните, где в вашем приложении находятся фактические затраты. Вы, вероятно, обнаружите, что дорогие запчасти не то, что вы думаете.

3 голосов
/ 05 августа 2010

Любые идеи о том, как сделать это с попаданием индекса только?Я также думал о запросе «только ключи»

Запрос «только ключи» - это единственный способ получить только индексный запрос.Будет ли это быстрее, чем получить, зависит от размера вашей сущности и размера вашего индекса.В тривиальном примере я получаю около 8 мс для запроса и 13 мс для запроса.Вы можете использовать AppStats, чтобы выяснить, что дешевле для вас, с реальными данными.

1 голос
/ 27 августа 2014

Вы можете попробовать запрос только ключей от Objectify следующим образом:

public static boolean objectExists(String id, Class<?> objectClass) {
  return OfyService.ofy().load().filterKey(Key.create(objectClass, id)).keys().first() != null;
}
1 голос
/ 05 августа 2010

Запрос только для ключей с фильтром на __key__ будет значительно быстрее, чем запросы, тестируемые на панели состояния.Является ли это быстрее, чем просто получение объекта, я не уверен - попробуйте и дайте нам знать!

...