Я развиваюсь в Google App Engine с года назад, и я понимаю, насколько важно время прогрева для экземпляров. Итак, у меня появилась идея: можно ли кэшировать одноэлемент в memcache? Например, я использую шаблон singleton для JDO PersistenceManagerFactory.Кэширование singleton в memcache
Вот мой реальный код (как описано в документации):
private static PersistenceManagerFactory pmfInstance = JDOHelper.getPersistenceManagerFactory(<my-name>);
Есть ли у него какой-то смысл что-то вроде продлить JDOHelper и написать функцию, как этот:
public static PersistenceManagerFactory getPersistenceManagerFactoryCached(String name) {
MemcacheService cache = MemcacheServiceFactory.getMemcacheService();;
PersistenceManagerFactory staticPMF= null;
if (cache.contains("JDO_PMF")) {
staticPMF = (PersistenceManagerFactory) cache.get("JDO_PMF");
} else {
staticPMF = JDOHelper.getPersistenceManagerFactory(name);
cache.put("JDO_PMF", staticPMF);
}
return staticPMF;
}
мою идею должно быть кэширование PersistenceManagerFactory для ускорения первого экземпляра, а затем использовать его в качестве одноэлементного:
private static PersistenceManagerFactory pmfInstance = JDOHelperCached.getPersistenceManagerFactory(<my-name>);
Если вы беспокоитесь о накладных расходах, прекратите использование JDO. PMF должен загружать целую кучу данных, которые действительно не имеют отношения к вашему приложению - использование чего-то более подходящего для задачи, например Objectify, позволит избежать этого. –