【问题标题】:Memcache Latency Time Too High?Memcache 延迟时间太高?
【发布时间】: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


【解决方案1】:

您可以将所有对象放在一个调用中。您也可以使用 AsyncMemcacheService - 使用 put 调用会更快一些。

记住:

“多”批处理操作可以有任意数量的元素。这 调用的总大小和获取的数据的总大小不得 超过 32 兆字节。

【讨论】:

  • 我使用 memcache.getAll() 来做到这一点。这不是办法吗?
  • 我说你可以批量put调用。
【解决方案2】:

通过 App Engine 可用的内存缓存是 shared or dedicated。使用共享(我假设您正在使用),您与其他用户在一个池中,延迟将在很大程度上取决于他们目前在做什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-27
    • 2018-09-09
    • 1970-01-01
    • 2013-11-22
    • 2011-03-26
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多