【发布时间】:2014-11-24 20:07:41
【问题描述】:
我有以下代码在 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。我真正关心的是了解我的应用程序将使用多少实例小时。有什么公式或方法可以计算吗?
【问题讨论】:
-
你是如何计算 Memcache 调用的延迟的?
-
我只是检查了应用引擎控制台日志中给出的延迟时间。
-
我没有看到 Memcache 调用的单独条目。如果您查看您的呼叫呼叫,您需要考虑您所做的所有其他事情,包括您的查询。
-
您是否使用Appstats对此进行了测量?
-
@user3370788 26ms 是请求延迟,而不是 Memcache API 调用延迟。要获得 API 延迟,您需要启用 Appstats,如前所述。如果您真正关心的是您的应用程序将使用多少实例小时,我建议您运行负载测试实验并确定运行 x 数量的 QPS 需要多少实例。一旦您知道平均需要的实例数,您就可以使用Pricing Calculator 进行估算。
标签: java google-app-engine memcached jpql low-latency