У меня есть код ниже, работающий на GAE. При получении элементов из memcache я получаю задержку около 30 мс только для 5–20 результатов. Не слишком ли это высоко? Есть ли способ улучшить его?
@SuppressWarnings({ "unchecked"})
@ApiMethod(name = "queryDesire2")
public List<String> queryDesire2(
@Nullable @Named("name2") String name2){
EntityManager mgr = getEntityManager();
List<String> list1=new ArrayList<String>();
Key userKey=null;
Long x=0L;
List<Key> keysNew = new ArrayList<Key>();
MemcacheService memcache = MemcacheServiceFactory.getMemcacheService();
try {
userKey=KeyFactory.createKey(name2,1);
if (memcache.get(userKey)==null) {
Query query2 = mgr.createQuery("select d.good from Desire d where d.ctgry = :name2");
list1 = query2.setParameter("name2", name2).getResultList();
for (String d : list1){
x=x+1L;
userKey = KeyFactory.createKey(name2,x);
memcache.put(userKey, d);
memcache.put(name2+"no", x);
}
} else {
Long y=(Long) memcache.get(name2+"no");
for (x = 1L; x<=y; x++){
userKey=KeyFactory.createKey(name2,x);
keysNew.add(userKey);
}
Map mMap;
mMap = memcache.getAll(keysNew);
list1 = new ArrayList<String>(mMap.values());
}
}
finally {
mgr.close();
}
return list1;
}
ИЗМЕНИТЬ:
Я сделал этот снимок из https://appengine.google.com/... журналов. Я предположил, что 26 мс на верхнем — это задержка. Но также я понял, что есть cpu_usd: 0.000035. Что меня действительно беспокоит, так это понять, сколько часов экземпляра будет использовать мое приложение. Есть ли какая-то формула или способ вычислить это?